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

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



相信大家对条件变量与互斥锁都有一些了解,那么,条件变量与互斥锁为什么要一起使用呢?动力节点小编来告诉大家。

条件变量与互斥锁要一起使用的原因

函数pthread_cond_wait()有几步操作:

判断条件,如果条件满足,继续执行;

如果条件不满足,就将线程挂到条件变量的等待线程队列中。

如果不加锁的话,这两步之间就可能存在时间窗口,也就是(1)当线程1判断条件不满足,(2)然后准备把线程挂起的时候,线程2改变了条件,(3)接着线程1挂在了条件变量的等待队列上,这样就可能死锁。

如果加上锁,这种时间窗口就会消除,使pthread_cond_wait的操作变成原子操作。pthread_cond_wait的第二个参数是一个加了锁的互斥量,这样可以避免线程在判断条件变量以及挂起的时候被别的线程改变条件。如果线程被挂起,pthread_cond_wait里面会解锁,是为了让别的线程来改变条件变量(别的线程在改变条件变量的时候,必须加锁,也是为了防止竞争)。但是从phread_cond_wait返回的时候,互斥量要再次被锁住。

总的来说,互斥锁就是用来保护条件变量的,因为有一些操作不是原子操作,存在竞争。

条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(并给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。

锁的目的很明确,使线程们互斥地访问某个东西(变量、代码段)。它只有两个状态(被持有,未被持有)

通过上述介绍,相信大家对条件变量与互斥锁要一起使用的原因已经有所了解,想了解更多可查看Java多线程编程技术文档,对大家的学习一定会有所帮助的。

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

版权声明


相关文章:

  • 什么叫多级列表(多级列表是干什么的)2024-12-10 20:09:06
  • 回环地址有什么用(环回地址有哪些)2024-12-10 20:09:06
  • plll是什么意思(pllo是什么意思)2024-12-10 20:09:06
  • 颜色代码 转换(颜色代码转换)2024-12-10 20:09:06
  • linux怎么学 知乎(linux就这么学)2024-12-10 20:09:06
  • 单机笔记本电脑(笔记本单机游戏哪个好玩)2024-12-10 20:09:06
  • 拆包(拆包机视频)2024-12-10 20:09:06
  • py文件如何直接运行(py文件怎么打开运行)2024-12-10 20:09:06
  • 做网页的代码(做网页代码h5)2024-12-10 20:09:06
  • 免费二级域名解析分发(免费二级域名解析平台)2024-12-10 20:09:06
  • 全屏图片