Windows 環境では、Boost のスコープ付きミューテックスは WinAPI のクリティカル セクションを使用していますか、それとも何か他のものですか?
2 に答える
の現在のバージョンは、 Win32も Win32 Mutex もboost::mutex
使用しません。CRITICAL_SECTION
代わりに、ブロック待機にアトミック操作と Win32 イベントを使用します。
古いバージョン (boost 1.34.1 以前) は、CRITICAL_SECTION
Windows のラッパーでした。
ちなみに、ミューテックス自体はスコープされていません。boost::mutex::scoped_lock
最近のバージョンでは、ロック解除を忘れないようにミューテックスをロックするための RAII ラッパーを提供しますboost::lock_guard<boost::mutex>
。boost::unique_lock<boost::mutex>
boost::lock_guard<>
およびboost::unique_lock<>
テンプレートは、 および メンバー関数を使用する任意の型で機能lock()
するunlock()
ため、必要に応じてプロセス間ミューテックスで使用できます。
Win32 の CRITICAL_SECTION は、単一プロセスのスレッド間でのみ使用できます。プロセス間で何かを使用する必要がある場合は、ミューテックスが必要です。Boostはクリティカルセクションについて何も言わないので、ミューテックスを使用していると思います。
「スコープ」とは、特定のスコープの最後でRAIIを使用してミューテックスを自動的にロック解除するラッパーがあることを意味します。