、窓のクリティカルセクション
==重要なエリアをミューテックスと同様に。
第二に、繰り返しクリティカルセクションを入力します。
クリティカルセクション(ロック)を入力します。
クリティカルセクション(ロック解除)を残します。
同じクリティカルセクション変数内のスレッドクリティカルセクションのウィンドウで複数回入力することを忘れないでください、エントリー(entercirticalsection)を複数回呼び出すことができ(複数エントリー)を表し、およびクリティカルエリアを数回左。C ++ 11には、そうでない場合は、同じスレッドが同じミューテックスを複数回ロックできるように、異常の報告はありません
三、ウィンドウが自動的に技術をデストラクタ
第四に、排他的な再帰的なミューテックスrecursive_mutex
自分のロックは、他の人がロックできないときはstd :: mutexはmutexを、独占します。
recursive_mutex:ミューテックスを持つ単一のスレッドが繰り返しロック可能にし、同じのミューテックスの使用。
低効率、より複雑な、再帰の数が制限され、あまりにも多くの異常が報告されてもよいです
第五に、タイムアウトのstd :: timed_mutexとstd ::のミューテックスrecursive_timed_mutex
ロックを乗り越えることができない、立ち往生している、誰かがロックを知るために待機していました
タイムアウトでロックを取得し、そのいくつかの時間のためではないですが、また次のコードを取るために継続して取得します。
:: lock_guard STD <STD :: recursive_mutex> sbguard(my_mutex); STD :: ::クロノミリ秒のタイムアウト(100); // 100のMS IF (my_mutex.try_lock_for(タイムアウト)){ // ロックを取得するために、100ミリ秒待っ // ,,,,実行 my_mutex.unlock(); } 他{ //はブレーク取得できませんでした :: ::クロノマイクロ秒のスリープ時間(STDを100); // 100微妙な のstd :: this_thread :: sleep_for(スリープ時間) ; }
try_lock_for():パラメータは、一定の期間で、ロック待ちタイムアウトを取得したり、あなたが行く、ということ取得していない場合は、いくつかの時間を待つことです。
try_lock_unit():パラメータは時間ではなく、この将来の時間である期間に将来の時点で、ロック得た場合、プロセスはそれを取得しない場合は、下に行くが、またダウンします。
1 STD :: ::クロノミリ秒のタイムアウト(100); // 100ミリ秒 2 IF(今my_mutex.try_lock_unit(クロノsteady_clock :: ::()+タイムアウト))
{
// ........
}。// 現在の時間とタイムアウト時間