共有ミューテックスのブースト: 複数読み取り/1 回書き込みのシナリオを理解する
頻繁な読み取りアクセスと時折の更新を必要とするマルチスレッド アプリケーションを使用する場合データを共有する場合、パフォーマンスを最大化しながらデータの整合性を維持することが重要になります。通常のミューテックスを使用して相互排他を実装すると、同時読み取りアクセスが妨げられ、不要なパフォーマンスのボトルネックが発生する可能性があります。
この課題に対処するために、Boost は、複数のスレッドが共有データを同時に読み取ることができるシナリオ向けに特別に設計された boost::shared_mutex クラスを提供します。書き込み操作の干渉を防ぎます。 boost::shared_mutex の機能を効果的に活用する方法を示す簡単な例を詳しく見てみましょう。
以下のコード スニペットでは、リーダー関数を実行する複数のスレッドがあり、共有データに対して読み取り操作を実行するだけです。構造。別のスレッドを導入して、conditional_writer 関数を実行します。この関数も、データから時折読み取りますが、特定の条件が満たされた場合、条件付きでアクセスを排他的書き込みモードにアップグレードします。最後に、unconditional_writer 関数は共有データに排他的に書き込みます。
boost::shared_mutex _access; void reader() { boost::shared_lock<boost::shared_mutex> lock(_access); // Read operations } void conditional_writer() { boost::upgrade_lock<boost::shared_mutex> lock(_access); // Read operations if (condition) { boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock); // Write operations } // More read operations } void unconditional_writer() { boost::unique_lock<boost::shared_mutex> lock(_access); // Write operations }
この設定では、複数のリーダー スレッドが同時に共有ロックを取得でき、データへの同時読み取りアクセスが可能になります。 Conditional_writer スレッドは、読み取り操作と条件付き書き込み操作の両方を許可するアップグレード ロックを取得します。必要な条件が満たされた場合、conditional_writer はロックを排他的書き込みモードにアップグレードし、データの排他的所有権を確保できます。 unconditional_writer スレッドは排他ロックを取得し、書き込み操作の実行中に他のすべてのスレッドがデータにアクセスできないようにします。
boost::shared_mutex を利用することで、書き込み操作中のデータの一貫性を維持しながら、読み取り操作中のボトルネックを防ぎます。この手法は、共有データ アクセスが頻繁に発生するマルチスレッド アプリケーションのパフォーマンスを最適化します。
以上がBoost の「shared_mutex」は共有データへのマルチスレッド読み取り/書き込みアクセスをどのように最適化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。