如何在第二个线程从映射中删除值时恢复线程

How to resume a thread when a second thread deletes value from a map?

本文关键字:线程 删除 恢复 第二个 映射      更新时间:2023-10-16

我正在创建boost线程并将其地址存储在映射中。这些线程将持续运行并迭代(比如)mapA,直到执行线程中断。

现在的问题是:

我想删除mapA中的一个值。我想让这个线程休眠,直到mapA中的值删除完成。一旦删除完成,线程应该继续它的工作。

Thread1
{
   ...Code...
   ...Code...
   loop over mapA
   ...Code...
   ...Code...
}
Thread2
{
   sleep(Thread1)
   until
   value in the mapA is deleted
   Continue(Thread1)
}

使用条件变量,例如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
  ...
}

即使你有多个产品/消费者,这也会很好地工作。