我们可以称程序中的潜在障碍吗

Posted

技术标签:

【中文标题】我们可以称程序中的潜在障碍吗【英文标题】:Can we call a potential barrier in a program 【发布时间】:2012-09-13 17:43:20 【问题描述】:

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

void some_function()

 potentially_barrier_wait;
 ......

所以我希望 potentially_barrier_wait 仅在需要时调用屏障,否则 potentially_barrier_wait 什么也不做。这件事能不能圆满实施?这是否也适用于已经存在障碍的程序,还是会与它们竞争。

【问题讨论】:

无论你的条件是什么,只要将屏障包裹在一个 if 语句中? 神秘 - 这是我的问题,是否可以在不引入竞争条件的情况下做到这一点,尤其是在已经有障碍的程序中。 哦,我害怕竞争条件,比如 if 条件。 取决于您的情况。如果您的条件需要一些非原子资源,则必须将整个事物包装在互斥体中。 - 所以在你的 if 语句中,写一个小的内联代码,在检查条件之前关闭和打开一个互斥锁。 你是如何实现屏障等待的? 【参考方案1】:

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

在 Windows 上,创建一个事件 CreateEvent(0, false, 0, 0)。在您的线程中,对其执行 WaitForSingleObject 。在您的“控制”线程中, SetEvent 让它通过您的障碍。您可以使用它进行预设,自动释放等。

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

【讨论】:

OP 询问会合障碍,如 pthread_barrier_*() 所示 虽然使用条件变量实现屏障对于小程序来说很复杂,但它是可能的;马克的回答是正确的。如果您查看the source for pthread_barrier_wait,它只是一个跨所有线程的条件变量。

以上是关于我们可以称程序中的潜在障碍吗的主要内容,如果未能解决你的问题,请参考以下文章

在行驶中前方有障碍物,无人驾驶技术可以自动识别吗?

如果我们部署了 Selenium + Java 用于测试自动化,当我们使用 Heroku 实现 CI/CD 流程时,我们会遇到任何障碍吗?

OpenCL 中的障碍

C 中的 Pthread 障碍是不是可重用?

京喜小程序首页无障碍优化实践

python线程障碍对象Barrier(34)