Linux线程同步之条件变量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lixiaogang_theanswer/article/details/85044116

一、条件变量
条件变量是一种“事件通知机制”,它本身不提供、也不能够实现“互斥”的功能。因此,条件变量通常(也必须)配合互斥量来一起使用,其中互斥量实现对“共享数据”的互斥(即同步),而条件变量则去执行 “通知共享数据状态信息的变化”的任务。比如通知队列为空、非空,或任何其他需要由线程处理的共享数据的状态变化。实际开发中,生产者-消费者模型是经常被使用到的一个技巧,若干线程不断的往某个队列中生产数据进去,而其他若干线程不断的去队列中消费数据。这里“队列”是共享的数据,需要用互斥量来对其进行加锁,防止数据紊乱;细心的读者发现,去队列消费数据的线程怎么才能知道队列中何时有数据进来,总不能一直在那里傻傻的等待吧!如果一直等待,则需要互斥量加锁,那么生产者线程会加锁失败,会一直尝试去加锁。这无形中会导致性能的急剧下降。因此这时候是“条件变量”闪亮登场,展示它真正“技术”的时候了,它会通知对应的(或广播所有等待状态变化的)线程,告知它们这个“共享数据”的状态变化信息,以执行对应的处理。

  • 等待条件变量总是返回被锁住的互斥量
  • 条件变量的作用是发信号,而不是互斥












互斥锁
互斥锁
互斥锁

猜你喜欢

转载自blog.csdn.net/lixiaogang_theanswer/article/details/85044116