|
|
1
2
确实,生产者稍后会解锁互斥锁,然后向条件变量发送信号。然而,接下来发生的事情是它在循环的下一次迭代中重新锁定互斥锁。这引发了下一个问题:即使线程正在等待一个条件变量,当发出信号时,也不能保证它在收到信号时能够重新锁定互斥锁。唯一可以保证的是,在向条件变量发出信号后的某个时刻,等待的线程将唤醒并执行此操作,但这不是一个不可分割的操作。
这里发生的事情是,生产者只是以足够快的速度重新锁定互斥锁,以防止使用者重新锁定互斥锁并从中返回
最简单的解决办法是
此外,对于经典的互斥体语义,应该在互斥体仍然被锁定时通知条件变量,而不是在解除锁定之后。这在这里并没有太大的区别,但在某些边缘情况下,它确实很重要,而且总是使用相同的信令/锁定顺序更容易,而不是试图找出在每个特定情况下它是否无关紧要。
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |