Ruby/Threads/Mutex

Материал из Wiki.crossplatform.ru

(Различия между версиями)
Перейти к: навигация, поиск
м (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