关于多线程编程中的条件变量实现线程同步

linux下c语言开发多线程

关于条件变量和互斥锁会一起使用的一些注意点

注意 1:mutex 互斥锁必须是普通锁(PTHREAD_MUTEX_TIMED_NP)或者适应锁(PTHREAD_MUTEX_ADAPTIVE_NP)。在调用 pthread_cond_wait()前必须由本线程加锁 pthread_mutex_lock()。在更新条件等待队列以前,mutex 保持锁定状态。在线程挂起进入等待前解锁。

注意 2:在条件满足从而离开 pthread_cond_wait() 之前,mutex 将被重新加锁,以与进入
pthread_cond_wait()前的加锁动作对应。也就是说在做 pthread_cond_wait 之前,往往要用 pthread_mutex_lock 进行加锁,而调 pthread_cond_wait 函 数 会 将 锁 解 开 , 然 后 将 线 程 挂 起 阻 塞 。 直 到 条 件 被pthread_cond_signal 激发,该函数内部又会将锁状态恢复为锁定状态,最后再用pthread_mutex_unlock 进行解锁。

注意 3:
pthread_cond_wait() 和 pthread_cond_timedwait()都被实现为取消点,也就是说如果
pthread_cond_wait()被取消,则退出阻塞,然后将锁状态恢复,然后当前线程就会终止。即
互斥锁又恢复锁定状态,然而当前线程已经被取消掉,那么这个互斥锁就不会被解开了,此
时锁得不到释放,就会造成死锁,因而需要在线程退出前为其解锁。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值