有点混乱!如果我们看一下以下场景可能会出现什么问题:我的目标是理解条件变量与互斥量的混合。
T1
T2
步骤2和3之间可能存在竞争条件,因此我们使用MUTEX。我不明白的是cond var + mutex的基本思想。
答案 0 :(得分:1)
我正在猜测你的背景和你想要的行为,但我认为你希望事情看起来像这样:
T1:
锁定互斥锁
2.检查变量
3.解锁互斥锁
4.等待条件变量
5.转到1
T2:
锁定互斥锁
2.修改变量
3.解锁互斥锁
4.信号条件变量
互斥锁是为了保护对变量的访问,这样你就不会同时读取和写入不同的线程。
条件变量用于同步线程,以便您可以控制事件发生的顺序。
答案 1 :(得分:1)
在写端上省略锁定有两个问题:
另请注意,条件变量的许多用法不仅仅是修改锁中的标志 - 它们可能会操纵链接列表,例如,或其他一些复杂的数据结构。在这种情况下,需要锁来保护数据结构以及条件变量。
答案 2 :(得分:0)
你做错了。条件变量具有与之关联的互斥锁。您需要在更改变量之前锁定互斥锁,然后再将其释放。
没有死锁 - pthread_cond_wait正确地将关联的互斥锁作为参数获取,因为它可以在您以无竞赛方式阻塞时解锁互斥锁(当您在条件变量的服务器队列上时释放互斥锁,这样当你发出条件变量信号时,你就会被唤醒。