2010-12-03 8 views
0

pthread_cond_signalデッドロックの呼び出しが原因で何が起こる可能性がありますか?pthread_cond_signalデッドロック

私が理解しているところ(man page)は、内部的にはミューテックスで実装されていますが、この内部ミューテックスロック操作がデッドロックする原因は何ですか?

EDIT:デッドロックが発生するようなアプリケーションをデバッグしています。スタックトレースの数は、次のようになります。


Thread 1 (Thread 0xf6dff6c0 (LWP 32001)): 
#0 0xffffe410 in __kernel_vsyscall() 
#1 0x00af15de in __lll_mutex_lock_wait() from /lib/tls/libpthread.so.0 
#2 0x00aef3eb in [email protected]@GLIBC_2.3.2() from /lib/tls/libpthread.so.0 
#3 0xf4cc8d83 in xxx 
+0

これは仮説ですか、実際はこれが起こっていますか? –

+0

私はLinuxアプリケーションの実際のデッドロック状況を調査中です。 – Krumelur

+2

そのスレッドが何をしているのかを表示せず、すべてのスレッドが何をしているのかを表示してください: 'thread apply all backtrace'。スレッドを1つだけ使用するとデッドロックになることはありません。 –

答えて

2

まあ、探すために一つのことは、特に適用聞こえるmanページから、この警告かもしれません:

条件機能が 非同期ではありませんシグナルは安全であり、シグナルハンドラからは を呼び出さないでください。 では、ハンドラは、 シグナルからの pthread_cond_signalまたは pthread_cond_broadcastの呼び出しで、呼び出し元のスレッドをデッドロックする可能性があります。

pthread_cond_tの内部ミューテックスが、他の変数の境界を超えて浮遊書込みによって上書きされている場合は、これを見ることもできます。

+0

ありがとうございます、はい、私は壊れたメモリの疑いがあります。シグナルハンドラからpthread *関数が使用されているかどうかを確認します。 – Krumelur