我不确定为什么这段代码有效:
m, n = Mutex.new, Mutex.new
t = Thread.new do
m.lock
p 'ha'
sleep 1
p 'ya'
n.lock
end
s = Thread.new do
m.lock
p 'h'
sleep 1
p 'y'
n.lock
end
t.join
s.join
我通过使用相同顺序的锁来避免死锁,但我不确定为什么这会起作用,因为每个互斥锁都需要同时具有mutex.lock和mutex.unlock,而且这段代码没有。解锁并仍然有效。为什么呢?