【发布时间】:2014-05-21 13:17:45
【问题描述】:
我无法理解 Mutex 和 Condition 变量在 Ruby 中的工作原理。 这是我的代码:
mutex = Mutex.new
cv = ConditionVariable.new
Thread.new {
puts 'First: Hello'
cv.signal
}
Thread.new {
cv.wait(mutex)
puts 'Second: Hello'
}
Thread.new {
cv.wait(mutex)
puts 'Third: Hello'
}
sleep 1
结果是
First: Hello
我尝试使用cv.broadcast,但它并没有改变任何东西。此外,我尝试删除第三个线程并使其仅适用于线程,它也没有改变任何东西。那么,有人能解释一下如何让两个线程等待另一个线程发出信号吗?
【问题讨论】:
-
sleep 1是错误的代码。那是脆弱的。永远不要使用与时间相关的代码来控制多个线程。 -
@sawa 它只用于给时间线程完成,一般我使用 thread.join
标签: ruby multithreading mutex condition-variable