Ruby/Threads/Mutex
Материал из Wiki.crossplatform.ru
(Различия между версиями)
ViGOur (Обсуждение | вклад) м (1 версия: Импорт выборки материалов по Ruby) |
Текущая версия на 18:00, 13 сентября 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