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