pthread_mutex_t,pthread_cond_wait

本文详细介绍了pthread条件变量的使用方法及注意事项,包括如何正确地在wait函数中使用while循环包裹pthread_cond_wait,如何避免在pthread_cond_destroy时出现的问题,以及如何处理因pthread_cancel导致的互斥锁锁定状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.360doc.com/content/10/1008/23/3700464_59462698.shtml

http://weihe6666.iteye.com/blog/1170141

http://tower.iteye.com/blog/309294

1 wait线程中应用while,将pthread_cond_wait包裹

2 pthread_cond_t的destroy需要在没有被wait时调用,这就要求wait线程需要被某个线程(比如主线程)join,然后在join后(回收完wait线程)进行pthread_cond_destroy

3

pthread_mutex_lock

pthread_cond_wait

pthread_mutex_unlock

调用wait时会将pthread_mutext_t unlock(比如在wait函数的第一行),然后进入阻塞状态 

被signal唤醒后会从阻塞处开始执行,执行完后会将pthread_mutex_t lock(比如在wait return的时候)

所以在pthread_cond_wait至pthread_mutex_unlock之间pthread_mutex_t是lock状态

4 wait线程可能被某线程(比如主线程)pthread_cancel终止,如果终止发生在wait线程的pthread_cond_wait和pthread_mutex_unlock这间,则由于pthread_cond_wait调用完后pthread_mutex_t处于lock状态,则wait线程的终止会造成signal线程无法获得pthread_mutex_t而失效。所以为了避免这种情况,最好在wait线程中加上pthread_cleanup_push和pthread_cleanup_pop,并在push的handle函数中pthread_mutex_unlock wait线程和signal共用的pthread_mutex_t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值