多线程:条件变量使用的两个注意事项

条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。条件变量上的基本操作有:触发条件(当条件变为 true 时);等待条件,挂起线程直到其他线程触发条件

  1. while ()为什么是while而不是if?
    因为可能会有虚假唤醒的问题。

    "This means that when you wait on a condition variable, the wait may (occasionally) return when no thread specifically broadcast or signaled that condition variable. Spurious wakeups may sound strange, but on some multiprocessor systems, making condition wakeup completely predictable might substantially slow all condition variable operations. The race conditions that cause spurious wakeups should be considered rare."

  2. pthread_cond_signalpthread_mutex_unlock的调用顺序是否可以交换
    不可以
    不必考虑性能损耗

    在Linux线程调度实现中,有两个队列,分别是cond_wait队列和mutex_lock队列, pthread_cond_signal只是让线程从cond_wait队列移到mutex_lock队列,并没有真正的执行线程切换,没有性能消耗。在iOS里面也是推荐pthread_cond_signalpthread_mutex_unlock之前调用的

    有可能锁被其他线程获取

参考

转载于:https://www.cnblogs.com/huahuahu/p/duo-xian-cheng-tiao-jian-bian-liang-shi-yong-de-li.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值