プログラムでデッドロックの問題が発生しています。だから私はロックについて読んでいますが、問題はほとんどの情報が一貫していないか、プラットフォームが定義されていないことです. 再帰ロック (Mutex) と非再帰ロック (Mutex)で、最も受け入れられている答えは次のとおりです。
再帰的ミューテックスには所有権があるため、ミューテックスを取得するスレッドは、ミューテックスを解放するスレッドと同じでなければなりません。非再帰的ミューテックスの場合、所有権の感覚はなく、どのスレッドが最初にミューテックスを取得したかに関係なく、通常、どのスレッドもミューテックスを解放できます。多くの場合、このタイプの「ミューテックス」は実際にはセマフォ アクションに近く、必ずしもミューテックスを除外デバイスとして使用するわけではなく、2 つ以上のスレッド間の同期またはシグナリング デバイスとして使用します。
解説では、人々はそれは正しくないと言い、それについての言及はありません. そう...
1) スレッド A で非再帰的ミューテックスをロックすると、スレッド B はロックを取得せずにロックを解除できますか?
2) スレッド A によって非再帰的ミューテックスでロックが取得され、スレッド B がロックを取得するために呼び出した場合、スレッド B はロックが解放されるまで待機してロックを取得しますか、それとも例外をスローしますか? 再帰的ミューテックスのこの場合はどうですか? (適切な結論を下すことができなかった他の質問でも議論されています)
3) 再帰ロックを使用する場合、プロセスの終了時に、すべての再帰ロックを解放する必要がありますか? (プロセスが終了する場所によっては発生しません)
4) 再帰的ロックと非再帰的ロックを慎重に組み合わせて使用する場合、どのような問題に注目していますか?
PS: Windows プラットフォームとstd::thread
.