我们可以称之为计划中的潜在障碍

时间:2012-09-13 17:43:21

标签: c++ c multithreading synchronization

我希望我的线程停在障碍点,但我想只在需要障碍时停止。例如,在某个计时器间隔之后,我希望所有线程都形成一个屏障。有没有办法设置潜在的障碍点?例如,在每个功能的开始。我想要这样的东西。

void some_function()
{
 potentially_barrier_wait;
 ......
}

所以我希望potentially_barrier_wait只在需要时才调用屏障,否则potentially_barrier_wait什么都不做。这件事能得到令人满意的实施吗?这也适用于已经存在障碍的程序,或者它们会与它们竞争。

1 个答案:

答案 0 :(得分:1)

取决于你所说的障碍...如果你指的是简单的同步,你可以这样做:

在Windows上,创建一个事件CreateEvent(0,false,0,0)。在你的线程中,在那上做一个WaitForSingleObject。在你的“控制”线程中,SetEvent它让它通过你的屏障。您可以使用它来预先设置,自动释放等。

在Linux上,类似但你可以使用pthread_cond_timedwait作为障碍,并用pthread_cond_signal发信号。