Boost を使用した共有ミューテックス
マルチスレッド環境では、同時アクセスとデータ破損を避けるためにデータ アクセスを同期する必要があります。 Boost は、boost::shared_mutex を使用してこれに便利なソリューションを提供します。これにより、複数のスレッドが読み取り中の書き込みを防止しながら同時にデータを読み取ることができます。
使用法の概要
Boost を使用するには::shared_mutex を使用すると、複数のスレッドが読み取りロック (boost::shared_lock) を取得して、他のリーダーをブロックせずにデータにアクセスできます。スレッドは書き込みが必要な場合、アップグレード ロック (boost::upgrade_lock) を取得できます。データがすでに読み取りロックされている場合、アップグレード ロックは、排他的アクセス (boost::upgrade_to_unique_lock) を取得する前に、すべての読み取りロックが解放されるまで待機できます。あるいは、無条件書き込みロック (boost::unique_lock) を取得して、他のすべてのスレッドがデータにアクセスするのをブロックすることもできます。
コード例
次のコードは、の使用法boost::shared_mutex:
boost::shared_mutex _access; void reader() { boost::shared_lock<boost::shared_mutex> lock(_access); // Read data without blocking other readers } void conditional_writer() { boost::upgrade_lock<boost::shared_mutex> lock(_access); // Read data without exclusive access if (condition) { boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock); // Write data with exclusive access } // Continue reading without exclusive access } void unconditional_writer() { boost::unique_lock<boost::shared_mutex> lock(_access); // Write data with exclusive access }
注:
以上がBoost::shared_mutex はマルチスレッド環境での同時読み取りおよび書き込みアクセスをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。