当前位置:网站首页 > 编程语言 > 正文

条件变量为什么要和锁一起用(条件变量为什么要和互斥一起使用)



在上面的情况中,如果我们不使用互斥锁,可能在 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 的阶段条件变量可能会发生改变

到此这篇条件变量为什么要和锁一起用(条件变量为什么要和互斥一起使用)的文章就 介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ddp贸易术语解释英文(ddp和ddu贸易术语)2026-03-02 22:54:07
  • bt151和bt152区别(bt151替代型号)2026-03-02 22:54:07
  • github的镜像网站(搭建github镜像站)2026-03-02 22:54:07
  • 字符串转码工具有哪些(字符串转码工具有哪些)2026-03-02 22:54:07
  • 卡巴斯基界面(卡巴斯基如何)2026-03-02 22:54:07
  • seated作为非谓语被动的用法(seat做非谓语的用法举例)2026-03-02 22:54:07
  • xmouse怎么设置(xMouse怎么设置开机启动)2026-03-02 22:54:07
  • samba windows共享(电脑samba共享)2026-03-02 22:54:07
  • 控件安装好打印机无法打印(控件安装好打印机无法打印怎么回事)2026-03-02 22:54:07
  • 指数与对数的运算题目(指数与对数的运算题目)2026-03-02 22:54:07
  • 全屏图片