1
我想了解为什么调用Mutex#synchronize会阻止我的代码运行。当我调用同步时,互斥锁没有锁定,所以不应该在代码块中运行无阻碍?第二个线程,没有锁,运行畅通无阻。互斥锁同步为何阻止执行?
m = Mutex.new
count1 = count2 = 0
Thread.new do
loop do
m.syncronize do
count1 += 1
end
end
end
Thread.new do
loop do
count2 += 1
end
end
sleep 1
p count1 # => 0
p count2 # => 1645454
注意:我添加了第二个非锁定线程来阐明我的示例。它似乎没有改变行为。
我正在运行MRI 1.9.3-p362。
如果我叫#join,我会抓住这一点。我很高兴我不需要重新思考我对线程的理解! –