C のリーダー/ライター ロック : 頻繁にリーダーを使用する場合と、頻繁に書き込みを行わない場合の効率的なソリューション
C では、リーダー/ライター ロックは非常に重要です複数のスレッドによる共有データへの同時アクセスを最適化するために設計された同期プリミティブ。リーダー/ライター ロックのメリットがよく得られるユース ケースは、頻度の低い単一のライターと、頻繁に使用される多数のリーダーが存在する場合です。この記事では、リーダー/ライター ロックを実装するための標準 C アプローチと、古いコンパイラ バージョンでの Boost を使用した代替方法について説明します。
標準 C ソリューション (C 14)
推奨最新の C バージョン (C 14 および VS2015 以降) のクロスプラットフォーム ソリューションは、標準ライブラリの
古いバージョン向けのブースト ソリューション
古いコンパイラ バージョンおよび標準の場合、確実な代替方法は、Boost スレッド ライブラリを使用することです。 Boost は次のロック タイプを提供します。
使用例
標準 C と Boost の両方を使用する方法は次のとおりです。ソリューション:
標準 C (C 14):
#include <shared_mutex> typedef std::shared_mutex Lock; typedef std::unique_lock< Lock > WriteLock; typedef std::shared_lock< Lock > ReadLock; Lock myLock; void ReadFunction() { ReadLock r_lock(myLock); // Do reader stuff } void WriteFunction() { WriteLock w_lock(myLock); // Do writer stuff }
Boost:
#include <boost/thread/locks.hpp> #include <boost/thread/shared_mutex.hpp> typedef boost::shared_mutex Lock; typedef boost::unique_lock< Lock > WriteLock; typedef boost::shared_lock< Lock > ReadLock; Lock myLock; void ReadFunction() { ReadLock r_lock(myLock); // Do reader stuff } void WriteFunction() { WriteLock w_lock(myLock); // Do writer stuff }
プラットフォームと C バージョンに基づいて適切なソリューションを選択することで、共有を効率的に管理できますリソースを削減し、ライターよりもリーダーの方がはるかに多い同時アプリケーションのパフォーマンスを最適化します。
以上がC のリーダー/ライター ロックは、頻繁に読み込むユーザーとまれな書き込みを行うユーザーの同時アクセスをどのように最適化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。