2011-08-15 12 views
-1

"SimpleMUCClient"を使用してsimple botを書きます。しかし、エラーが発生しました:app.rb:73:stop': deadlock detected (fatal) from app.rb:73:in 'です。それを修正するには?問題wuth Rubyスレッド

+2

修正方法? **デッドロックを起こさない**(これが本当の質問になる前にもっと多くの情報を提供する必要があります...) – jtbandes

+0

サンプルコードを教えてもらえますか? – nucleartux

+1

いいえ、私は本当にできません。 [this](http://stackoverflow.com/questions/how-to-ask)をお読みください。 – jtbandes

答えて

1

実行しているコードは、おそらく別のスレッドで実行されている可能性があります。その特定のスレッドは、Thread.join()を使って結合されます(Rubyがスクリプトを終了して終了するのを待ちます)。 Thread.stop()を呼び出すと同時に.join()を呼び出すと、デッドロックが発生する可能性があります。私はあなたの質問に投票したので、あなたが行っていないので、適切に質問する方法については、StackOverflowのガイドに従う必要があると言いました。まだThread.stopを呼び出しながら、スレッドへの参加

は、次のように行うことができます。

th = Thread.new do 
    Thread.stop 
end 

if th.status === 'sleep' 
    th.run 
else 
    th.join 
end 

それはクリーンな方法ではないのですが、それは動作します。また、スレッドを実際に終了したい場合は、代わりにThread.exitを呼び出す必要があります。

+0

あなたのコードで、私もapp.rb:79: 'join ':デッドロックが検出されました(致命的) \t app.rb:79:'

' – nucleartux

+0

次にコードの外で起こっていることがあります他の何かがデッドロックの原因となっています。 –