問題タブ [recursive-mutex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 再帰的および非再帰的なロック (Mutex)
プログラムでデッドロックの問題が発生しています。だから私はロックについて読んでいますが、問題はほとんどの情報が一貫していないか、プラットフォームが定義されていないことです. 再帰ロック (Mutex) と非再帰ロック (Mutex)で、最も受け入れられている答えは次のとおりです。
再帰的ミューテックスには所有権があるため、ミューテックスを取得するスレッドは、ミューテックスを解放するスレッドと同じでなければなりません。非再帰的ミューテックスの場合、所有権の感覚はなく、どのスレッドが最初にミューテックスを取得したかに関係なく、通常、どのスレッドもミューテックスを解放できます。多くの場合、このタイプの「ミューテックス」は実際にはセマフォ アクションに近く、必ずしもミューテックスを除外デバイスとして使用するわけではなく、2 つ以上のスレッド間の同期またはシグナリング デバイスとして使用します。
解説では、人々はそれは正しくないと言い、それについての言及はありません. そう...
1) スレッド A で非再帰的ミューテックスをロックすると、スレッド B はロックを取得せずにロックを解除できますか?
2) スレッド A によって非再帰的ミューテックスでロックが取得され、スレッド B がロックを取得するために呼び出した場合、スレッド B はロックが解放されるまで待機してロックを取得しますか、それとも例外をスローしますか? 再帰的ミューテックスのこの場合はどうですか? (適切な結論を下すことができなかった他の質問でも議論されています)
3) 再帰ロックを使用する場合、プロセスの終了時に、すべての再帰ロックを解放する必要がありますか? (プロセスが終了する場所によっては発生しません)
4) 再帰的ロックと非再帰的ロックを慎重に組み合わせて使用する場合、どのような問題に注目していますか?
PS: Windows プラットフォームとstd::thread
.
c++ - unique_lock を recursive_mutex で使用できますか?
thisによると、unique_lock
a を宣言することで再帰ロックに使用できstd::unique_lock<std::recursive_mutex>
、実際には正常にコンパイルされます。
ただし、コード (gcc 4.8.2 および 4.9.0) を調べると、ロック メソッド自体を実装するのではなく、ロック メソッド自体を実装しているようにunique_lock
見えます。_Mutex.lock
明らかに、これによりミューテックスの再帰的ロックが防止され、実際、再帰的にロックしようとするとresource_deadlock_would_occur
例外がスローされます。
ここに何かが欠けていますか、これはバグですか、それともunique_lockのドキュメントが間違っていますか?
ティア!!!
c++ - アクションlisting_6.1のC++同時実行がstd::recursive_mutexを使用しない理由
「C++ Concurrency In Action」という本を読んでいて、リスト 6.1 で使用されているミューテックスについて質問があります。コード スニペットは次のとおりです。
メソッドはpop
ミューテックスをロックしてから、空のミューテックスを呼び出します。ただし、ミューテックスは recursive_mutex ではなく、コードは適切に機能します。std::mutex
したがって、との実際の違いは何なのか疑問std::recursive_mutex
です。
c++ - recursive_mutex の所有権の最大レベルの下限は?
オブジェクトを所有するスレッドは、そのオブジェクトに対してまたはを
recursive_mutex
呼び出すことによって、追加レベルの所有権を取得できます。1 つのスレッドが取得できる所有権レベルの数は指定されていません。スレッドがオブジェクトの最大レベルの所有権を既に取得している場合、 への追加の呼び出しは失敗し、 への追加の呼び出しは type の例外をスローします。lock()
try_lock()
recursive_mutex
try_lock()
lock()
system_error
「所有権の最大レベル」に 1 より大きい下限はありますか? 再帰的な pthread ミューテックスはどうですか?
c - C - ミューテックス属性
複数の再帰的ミューテックスを初期化するために、ミューテックス属性を 1 つだけ作成して使用することはできますか? それとも、作成したいミューテックスごとに 1 つのミューテックス属性を作成する必要がありますか? 基本的に、次のコードは正しいですか?
c++ - std::recursive_mutex で使用される所有者カウンターにアクセスする
アルゴリズムの決定が共有の深さに基づいている場合がありますstd::recursive_mutex
。
再帰的ミューテックスが何らかの使用カウントを保持し、ロック/ロック解除の呼び出しごとに増減することを読んだことがありますが、その情報にアクセスする方法はありますか?
python - ctypes 経由で _thread.RLock のカウントに簡単にアクセスできますか?
クラスから継承し、基になる属性からデータを公開することで、 のcount
プロパティを作成できます。threading._RLock._count
これは、例によって簡単に示されます。
_thread.RLock
経由でカウントを取得することで同じことを行うことは可能ctypes
ですか?- 可能であれば、上記のバージョンよりもコードに利点がありますか?
- それが有利であるとすれば、カウントにアクセスするためにどのようなコードを書かなければなりませんか?