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:

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 回答