0

ブースト スレッドを作成し、そのアドレスをマップに保存しています。これらのスレッドは、スレッド割り込みを行うまで、(たとえば) mapA に対して継続的に実行および反復されます。

今質問:

mapA の値を削除したい。mapA の値の削除が完了するまで、このスレッドをスリープさせたいと考えています。削除が完了すると、スレッドは作業を続行する必要があります。

Thread1
{
   ...Code...
   ...Code...
   loop over mapA
   ...Code...
   ...Code...
}

Thread2
{
   sleep(Thread1)
   until
   value in the mapA is deleted
   Continue(Thread1)
}

前もって感謝します !

4

1 に答える 1

2

概略的にブーストを使用して、そのために条件変数を使用します。

boost::mutex mutex;
boost::condition_variable cond;

Thread1
{
  boost::scoped_lock lock(mutex);

  ....
  // Looping over map done
  cond.notify_one();
}

Thread2
{
  boost::scoped_lock lock(mutex);

  // wait for end of thread1
  cond.wait(lock);

  // when we get here we continue, and lock is protecting concurrency from thread1 again
  ...
}

これは、複数のプロデュース/コンシューマーがある場合でもうまく機能します。

于 2013-01-03T15:04:52.343 に答える