1. ホーム
  2. c++

[解決済み] boost shared_mutex (multiple reads/one write)の例?

2022-09-11 05:17:17

質問

あるデータを頻繁に読み込む必要があるマルチスレッド・アプリがあります。そして、そのデータは時々更新されます。現在は、ミューテックスがそのデータへのアクセスを安全に保ちますが、複数のスレッドが同時に読み取り、更新が必要なときだけそれらをロックアウトできるようにしたいので、それは高価です (更新スレッドは、他のスレッドが終了するまで待つことができます)。

私は、これは boost::shared_mutex がそうなっていると思うのですが、使い方がよくわからず、明確な例も見つかっていません。

どなたか、始めるのに使える簡単な例をお持ちではないでしょうか?

どのように解決するのですか?

次のようなことをするようです。

boost::shared_mutex _access;
void reader()
{
  // get shared access
  boost::shared_lock<boost::shared_mutex> lock(_access);

  // now we have shared access
}

void writer()
{
  // get upgradable access
  boost::upgrade_lock<boost::shared_mutex> lock(_access);

  // get exclusive access
  boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
  // now we have exclusive access
}