如何在第二个线程从映射中删除值时恢复线程
How to resume a thread when a second thread deletes value from a map?
我正在创建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
...
}
即使你有多个产品/消费者,这也会很好地工作。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++中的线程安全删除
- 线程调用的函数对对象删除是否安全?
- 删除原子多线程代码中的容器
- C++ 线程创建/删除与线程停止/恢复
- 从矢量中删除已完成的线程
- 完全删除 QApplication 实例并在另一个线程中重新创建它
- 在 DTor 之前删除的静态对象创建的线程?
- 线程池 - 如何在成员线程完成后删除工作线程(此)
- C++多线程程序尝试使用已删除的函数
- C 线程:尝试使用已删除的函数
- 如何安全地删除ATL DLL中的std ::线程
- 从另一个线程中删除对齐的内存
- 删除boost ::线程后代
- boost ::线程在删除可加入线程时存在什么问题
- 删除线程时崩溃
- 从多线程程序中安全地删除对象
- C++线程和Promise:试图引用已删除的函数
- MFC:阻止线程删除指向其 ControllingFunction 的输入指针
- 在C++中,一个线程中的new可以分配另一个线程删除的内存吗