【发布时间】:2015-07-08 01:46:55
【问题描述】:
在下面的(伪)代码中,cond 可能会唤醒,而它不应该唤醒,无论出于何种原因。所以我在那里放了一个while循环。当它唤醒时,它仍然会消耗锁,因此可以保证在out() 中只有一个线程在做它的工作。
但是,如果 out() 中存在虚假唤醒,同时 in() 向 out() 发出信号,但此时 out() 已经由于虚假唤醒而被锁定,会发生什么情况-向上。那么如果cond 向锁定的线程发出信号会发生什么?
in()
inLock.lock()
isEmpty = false
cond.signal()
inLock.unlock()
out()
outLock.lock()
while isEmpty
cond.wait(outLock)
isEmpty = true
outLock.unlock()
注意
好吧,为了 100% 安全,我知道我可以为 in() 和 out() 使用一个互斥锁,但是当输入和输出同时发生时,我使用的数据结构是 100% 安全的;它是一种队列。而且我认为在填充一些新数据的同时阻止从队列中读取的任何内容是一种性能折衷,反之亦然。
我确实考虑过使用信号量,但问题是很多 C 和 C++ 库出于任何原因都没有实现信号量。
【问题讨论】:
标签: c multithreading pthreads mutex condition-variable