apue 第十一章 线程

本文详细介绍了APUE中关于线程的内容,包括pthread_join函数的作用,线程的分离状态及其影响,pthread_cleanup_push和pthread_cleanup_pop的使用,以及互斥锁和读写锁的概念和操作。同时,提到了条件变量pthread_cond_wait、pthread_cond_signal的使用场景,强调了在多线程同步中的重要性。
摘要由CSDN通过智能技术生成

pthread_join(pthread_t tid,void **rval_ptr)

old线程创建了new线程,然后调用pthread_join来等待new线程返回,返回值为*rval_ptr

apue中提到一个线程的分离状态概念:

类比于进程,子进程在退出中,会保留退出状态供父进程调用wait/waitpid获取

对于线程,P318:默认情况下,线程的终止状态会保存知道对该线程调用pthread_join;P312:pthread_join自动把线程置于分离状态

而处于分离状态的线程会由系统回收资源

另:对已处于分离状态的线程(比如在创建时设置属性为分离状态)调用pthread_join,会产生未定义的行为

可以调用pthread_detach(tid)将线程置于分离状态。


pthread_cleanup_push/pthread_cleanup_pop

在网上查到这两个函数是用宏实现的,push函数中有'{',pop函数中有'}',因此一定要成对出现。

push()

/*

代码

*/

pop(execut)

如果线程在push和pop之间以pthread_exit()退出,或者响应其他线程对该线程调用的pthread_cancel退出,会自动调用push建立的清理函数

如果是return则不调用

当线程正常运行到pop时(即没有退出),如果execute为0,则不会调用清理函数,否则调用清理函数。同时,无论是否调用清理函

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值