9

Windows 環境では、Boost のスコープ付きミューテックスは WinAPI のクリティカル セクションを使用していますか、それとも何か他のものですか?

4

2 に答える 2

20

の現在のバージョンは、 Win32も Win32 Mutex もboost::mutex使用しません。CRITICAL_SECTION代わりに、ブロック待機にアトミック操作と Win32 イベントを使用します。

古いバージョン (boost 1.34.1 以前) は、CRITICAL_SECTIONWindows のラッパーでした。

ちなみに、ミューテックス自体はスコープされていません。boost::mutex::scoped_lock最近のバージョンでは、ロック解除を忘れないようにミューテックスをロックするための RAII ラッパーを提供しますboost::lock_guard<boost::mutex>boost::unique_lock<boost::mutex>

boost::lock_guard<>およびboost::unique_lock<>テンプレートは、 および メンバー関数を使用する任意の型で機能lock()するunlock()ため、必要に応じてプロセス間ミューテックスで使用できます。

于 2009-05-18T15:12:26.003 に答える
2

Win32 の CRITICAL_SECTION は、単一プロセスのスレッド間でのみ使用できます。プロセス間で何かを使用する必要がある場合は、ミューテックスが必要です。Boostはクリティカルセクションについて何も言わないので、ミューテックスを使用していると思います。

「スコープ」とは、特定のスコープの最後でRAIIを使用してミューテックスを自動的にロック解除するラッパーがあることを意味します。

于 2009-05-18T13:02:36.687 に答える