この記事ではRubyによるデッドロック検出時のエラーメッセージを説明する。 サンプル 以下のスクリプトを実行するとデッドロックが検出される。 #!/usr/local/bin/ruby -Ks require 'thread' q = Queue.new Thread.new do q.deq end.join このプログラムでは、メインスレッドはワーカスレッドの終了をThread#joinによって待っている。その一方でワーカスレッドはQueue#deqを呼ぶことでデータのエンキューを待つ。したがってどのスレッドも動けない。 この時、Rubyは以下のメッセージを表示して実行を中断する。 test>ruby dl.rb deadlock 0xf63c8: sleep:- - /usr/local/lib/ruby/1.8/thread.rb:318 deadlock 0x10d678: sl