【发布时间】:2012-09-13 17:43:20
【问题描述】:
我希望我的线程在障碍点处停止,但我只想在需要障碍时停止。例如,在某个计时器间隔之后,我希望所有线程都形成一个屏障。有没有设置潜在障碍点的方法?例如在每个函数的开始。我想要这样的东西。
void some_function()
{
potentially_barrier_wait;
......
}
所以我希望 potentially_barrier_wait 仅在需要时调用屏障,否则 potentially_barrier_wait 什么也不做。这件事能不能圆满实施?这是否也适用于已经存在障碍的程序,还是会与它们竞争。
【问题讨论】:
-
无论你的条件是什么,只要将屏障包裹在一个 if 语句中?
-
神秘 - 这是我的问题,是否可以在不引入竞争条件的情况下做到这一点,尤其是在已经有障碍的程序中。
-
哦,我害怕竞争条件,比如 if 条件。
-
取决于您的情况。如果您的条件需要一些非原子资源,则必须将整个事物包装在互斥体中。 - 所以在你的 if 语句中,写一个小的内联代码,在检查条件之前关闭和打开一个互斥锁。
-
你是如何实现屏障等待的?
标签: c++ c multithreading synchronization