Ruby/Threads/Mutex
Материал из Wiki.crossplatform.ru
Версия от 17:10, 26 мая 2010; (Обсуждение)
Classic deadlock: two threads and two locks
require "thread" m,n = Mutex.new, Mutex.new t = Thread.new { m.lock puts "Thread t locked Mutex m" sleep 1 puts "Thread t waiting to lock Mutex n" n.lock } s = Thread.new { n.lock puts "Thread s locked Mutex n" sleep 1 puts "Thread s waiting to lock Mutex m" m.lock } t.join s.join
Use mutex to lock
$mutex = Mutex.new t1 = Thread.new { $mutex.lock; sleep 30 } sleep 1 t2 = Thread.new do if $mutex.try_lock puts "Locked it" else puts "Could not lock" # Prints immediately end end sleep 2