【发布时间】:2016-02-28 20:50:51
【问题描述】:
我想要两个线程(我们称它们为 t1 和 t2)等待另一个线程 t0。让我们简化一下,说 t1 和 t2 都是工作线程。我认为下面的代码不能正常工作。
/* ... code both t1 and t2 run ... */
if (t0.joinable()) {
/* race condition here */
t0.join();
}
对于joinable,t1 和 t2 都可能为真,然后 joins 中的第一个获胜而另一个可能出现段错误,对吗?那么让两个线程在一个第三个线程上等待的正确方法是什么?
有没有办法仅通过 STL 的连接来做到这一点,或者 t0 是否需要设置某种(原子)完成标志或使用条件变量?
【问题讨论】:
-
STL 是指
std库? STL 没有线程支持 -
他们可以原子地选择一个线程加入第三个线程,一旦完成加入,所选线程会通知另一个线程。
标签: multithreading c++11 stl thread-safety