Boost.shared_lockは、リーダーとライターの問題を解決します



Boost Shared_lock Solves Problem Readers



boost :: shared_lockクラスは、非排他的ロックを提供します。このクラスは、boost :: shared_mutexミューテックスとともに使用する必要があります。 boost :: shared_mutexを使用すると、スレッドは複数の共有所有権と1つの排他的所有権を取得できます。これは、ミューテックスよりもはるかにコストがかかります。 lock_shared()またはtry_lock_shared()を介して共有所有権を取得し、unlock_shared()を使用して共有所有権を解放します。に

Shared_lock

ロックを書き込むときにunique_lockを使用する




実装コードは次のとおりです。




#include #include #include #include #include using namespace std #include #include typedef boost::mutex CMutex typedef boost::shared_mutex CSharedMutex typedef boost::unique_lock CWriteLocker typedef boost::shared_lock CReadLocker typedef boost::thread_group CThreadPool CMutex muConsole//mutually exclusive access buffer class CArticle{ private: int iPaper CSharedMutex muPaper public: CArticle(){iPaper = -1} void Write(int data){CWriteLocker oWriteLocker(muPaper) iPaper = data} void Read(int& data){CReadLocker oReadLocker(muPaper) data = iPaper} } void WriterProc(CArticle& article, string name){ for(int i = 0 i <8 i++) FOREGROUND_GREEN } void ReaderProc(CArticle& article, string name){ int data = -1 for(int i = 0 i < 2 i++) FOREGROUND_BLUE) muConsole.unlock() } void main() FOREGROUND_GREEN