我希望我的线程停在障碍点,但我想只在需要障碍时停止。例如,在某个计时器间隔之后,我希望所有线程都形成一个屏障。有没有办法设置潜在的障碍点?例如,在每个功能的开始。我想要这样的东西。
void some_function()
{
potentially_barrier_wait;
......
}
所以我希望potentially_barrier_wait
只在需要时才调用屏障,否则potentially_barrier_wait
什么都不做。这件事能得到令人满意的实施吗?这也适用于已经存在障碍的程序,或者它们会与它们竞争。
答案 0 :(得分:1)
取决于你所说的障碍...如果你指的是简单的同步,你可以这样做:
在Windows上,创建一个事件CreateEvent(0,false,0,0)。在你的线程中,在那上做一个WaitForSingleObject。在你的“控制”线程中,SetEvent它让它通过你的屏障。您可以使用它来预先设置,自动释放等。
在Linux上,类似但你可以使用pthread_cond_timedwait作为障碍,并用pthread_cond_signal发信号。