Pthred_detach 线程分离|学习笔记

简介: 快速学习 Pthred_detach 线程分离

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频Pthred_detach 线程分离】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11061


Pthred_detach 线程分离

 

内容介绍:

一、定义

二、线程分离特点

三、结构

四、验证

 

一、定义

创建一个线程后应回收其资源,可以通过 pthread_join 等待线程结束,回收其资源。

或者等进程结束,系统会回收其资源,如果进程不结束,而且也没有join,那么线程资源不会被回收。但使用 pthread_join 函数会使调用者阻塞,故Linux提供了线程分离函数 pthread_detach。

 

二、线程分离特点

一旦使线程分离,线程依旧依赖于进程存在,只不过不需要使用join,在进程没有结束的时候,系统会自动回收其资源。

 

三、结构

1.#include

Int pthread_detach(pthread_t,thread)

若进行线程分离,那么他的参数就是线程号。

2.功能:

使调用线程与当前进程分离,使其成为一个独立的线程,该线程终止时,系统将自动回收它的资源。不需要join,进程也不需要结束的时候就可以回收已经结束的线程资源

3.参数:

thread:线程号

一旦将线程分离后,pthread_join 就不再阻塞。

4.返回值:

成功:返回 0,失败返回非 0。

 

四、验证

1. 在 main 函数中,创建了一个线程,线程号被保存在 tid1 中,thead 是线程函数,创建好线程后,将其分离。在设置 join 等待线程结束。

2. 线程1做的事情是:

for循环五次,每次循环一秒打印1条提示信息。

如果没有分离,join会等5秒,等待线程结束后会after join,再次等待三秒,程序才结束。以下为去掉分离后的结果。

image.png

3.如果添加线程分离,join不阻塞。以下为添加分离得出结果,直接结束join,等待三秒结束程序。

4. 以上说明:

即使线程分离了,但还是依赖于进程存在的。

5. 将等待时间改为10秒在结束程序,那线程就可以结束了。5秒之后结束,自动回收资源,过完10秒结束程序,5-10s的时候线程资源已经被自动回收。以下为输出结果。

image.png

相关文章
|
2天前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
44 0
|
2天前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
19 4
多线程学习笔记(一)
创建线程有3种方式:继承Thread类、实现Runnable接口或Callable接口。继承Thread类时,重写run()方法并调用start()启动线程。实现Runnable接口时,实现run()方法,通过Thread的target创建线程对象并用start()启动。
|
2天前
|
Java C++
多线程学习笔记(二)
1. 子线程先执行:启动子线程后立即调用`join()`,主线程会等待子线程完成。 `suspend()`方法。 3. `synchronized` vs `Lock`:前者是关键字,后者是接口;前者可用在代码块和方法,后者在代码中显式;前者自动释放锁,后者需`finally`释放;前者无超时/中断控制,后者可设定;前者非公平,后者可公平/不公平,且支持读写锁。 4. `synchronized`底层实现:基于 Monitor 模型,JVM层面的锁定机制,通过 monitors 和 monitorenter/monitorexit 指令实现。
|
2天前
|
存储 安全 Linux
【探索Linux】P.19(多线程 | 线程的概念 | 线程控制 | 分离线程)
【探索Linux】P.19(多线程 | 线程的概念 | 线程控制 | 分离线程)
8 0
|
2天前
|
存储 安全 Java
【亮剑】`ConcurrentHashMap`是Java中线程安全的哈希表,采用锁定分离技术提高并发性能
【4月更文挑战第30天】`ConcurrentHashMap`是Java中线程安全的哈希表,采用锁定分离技术提高并发性能。数据被分割成多个Segment,每个拥有独立锁,允许多线程并发访问不同Segment。当写操作发生时,计算键的哈希值定位Segment并获取其锁;读操作通常无需锁定。内部会根据负载动态调整Segment,减少锁竞争。虽然使用不公平锁,但Java 8及以上版本提供了公平锁选项。理解其工作原理对开发高性能并发应用至关重要。
|
2天前
|
Java Linux API
Linux C/C++ 开发(学习笔记五):线程池
Linux C/C++ 开发(学习笔记五):线程池
24 0
|
2天前
|
安全 Linux 调度
Linux C/C++ 开发(学习笔记四):多线程并发锁:互斥锁、自旋锁、原子操作、CAS
Linux C/C++ 开发(学习笔记四):多线程并发锁:互斥锁、自旋锁、原子操作、CAS
45 0
|
9月前
|
前端开发 定位技术
前端学习笔记202305学习笔记第二十三天-地图单线程配置
前端学习笔记202305学习笔记第二十三天-地图单线程配置
68 0
前端学习笔记202305学习笔记第二十三天-地图单线程配置
|
9月前
|
Java
java202303java学习笔记第三十九天自定义线程池详解1
java202303java学习笔记第三十九天自定义线程池详解1
29 0