linux线程分离是什么意思

linux线程分离是什么意思,第1张

线程分离

在任意一个时间点上,线程是可结合(joinable)或者是可分离的(detached)。一个可结合线程是可以被其他线程收回资源和杀关闭。在被回收之前,他的存储器资源(栈等)是不释放的。而对于detached状态的线程,其资源不能被别的线程收回和关闭,只有等到线程结束才能由系统自动释放

默认情况,线程状态被设置为结合的。所以为了避免资源泄漏等问题,一个线程应当是被显示的join或者detach的,否则线程的状态类似于进程中的Zombie Process。会有部分资源没有被回收的。

返回值:成功:0,错误:出错编号。

pthread不是Linux系统默认的库而是POSIX线程库。在Linux中将其作为一个库来使用,因此编译时需要加上-pthread以显式链接该库

返回线程ID

线程标识符在进程中是唯一的,即分别属于两不同进程的两个线程可能有相同的线程标识符

retval:返回信息

参数表:

thread: 要等待的线程的pid

retval:用来存储被等待线程的返回值

返回0:成功;返回错误号:失败

主线程阻塞自己,等待子线程结束,然后回收子线程资源

可以设置线程能否被取消和取消后是否立即执行

参数表

state:PTHREAD_CANCEL_DISABLE或者PTHREAD_CANCEL_ENABLE

oldstate:指针类型,上一次取消状态的指针,可设NULL

type:PTHREAD_CANCEL_ASYNCHRONOUS立即取消

PTHREAD_CANCEL_DEFERRED等待事件(如pthread_join时)才取消

在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死,只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 因此为了避免内存泄漏,所有线程的终止,要么已设为DETACHED,要么就需要使用pthread_join()来回收

返回0成功,错误号失败

分离后不可以再合并。该 *** 作不可逆

综合以上要想让子线程总能完整执行(不会中途退出),

注:很多地方参照了黄茹老师主编的《Linux环境高级程序设计》


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6160051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存