2012-03-07 8 views
3

に助けが必要です。ある時点で、すでにロックされているミューテックスをロックしようとしているスレッドが見えることがあります。は、私は次のコードでミューテックス死んでロックを持っているデバッグミューテックス死んロック

mutexをロックするリアルタイムスレッドと非リアルタイムスレッドの両方があります。私は優先度の逆転があるかもしれないが、これがどのようにデッドロックを引き起こす可能性があるか理解しています。

+0

'pthread_mutex_lock(&_ Mutex);にコードを投稿できますか?そのコードが既にロックが適切に処理されていないと、デッドロックが発生することがあります。 –

+1

_Registry.insert()または_Registry.erase()が例外をスローしている可能性はありますか?それはミューテックスをロックされたままにしておくでしょう... – Nemo

+5

なぜ*予約された識別子*が好き?アンダースコアと大文字で始まる識別子は使用できません。 '_Registry'と' _Mutex'は実装用に予約されています。 –

答えて

2

あなたのコードは完全にうまくいくようです。あなたは_Mutexがどこにも使われていないと確信していますか?

Valgrindツールセットには、デッドロックの原因となるpthreadデバッガであるHelgrindが含まれています。多分あなたはそれを実行することができます。

+0

+1 helgrindのために、それは似たようなシナリオで私を助けてくれました –

0

デッドロックがあるか、スレッドが他の優先度の高いスレッドによって長時間ブロックされていませんか?

あなたが優先順位の逆転の問題を回避するために

pthread_mutexattr_setprotocol (&attr, PTHREAD_PRIO_INHERIT) 

を使用してに見たことがありますか?

関連する問題