在上面的情况中,如果我们不使用互斥锁,可能在 while 语句之后,当前线程还未进入 wait ,但是另一个线程调用了 pthread_cond_singal,就会导致唤醒丢失。
所以,在操作条件变量时需要加上互斥锁:
但是看了上面的代码你可能会产生疑问,如果线程进入 wait 阻塞状态,那么互斥锁还咋解锁呢?别的线程如何调用 pthread_cond_singal 呢?
这里就必须要理解 pthread_cond_wait 了,它实际做的事情可以分为 4 部分:
① 将当前线程加入等待队列;
② pthread_mutex_unlock(&mutex);
③ wait 等待唤醒;
④ pthread_mutex_lock(&mutex);
所以线程在进入 wait 前已经解开了互斥锁,当被唤醒时会重新上锁。之所以要这么做,是因为我们必须要保证解锁和 wait 是原子操作,不然解了锁还没进入 wait 的阶段条件变量可能会发生改变。
到此这篇条件变量为什么要和锁一起用(条件变量为什么要和互斥一起使用)的文章就 介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/37175.html