Никто не обещал, что процессор остановит мир, ожидая ваших действий :) Тем не менее, между
raise 'Break'
и
puts "(1) rescue break, m.locked?: #{m.locked?}"
существует другой поток, который может получить время выполнения и, в свою очередь, заблокировать мьютекс .
Обратите также внимание, что
raise 'Break'
end
rescue
puts "(1) rescue break, m.locked?: #{m.locked?}"
фактически совпадает с
end
puts "(1) rescue break, m.locked?: #{m.locked?}"
В последнем фрагменте должно быть ясно, что m
может быть заблокирован другим потоком или нет; у нас это только что выпустили, так что без обещаний.