问题标签 [barrier]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为什么 Boost 库在其线程屏障的实现中使用 m_generation 变量?
boost 库(在 C++11 标准之前)提供了对线程的支持。作为其支持的一部分,它还提供了“屏障”的实现,这是一个允许同步的简单类。引用boost 网站:
“屏障是一个简单的概念。也称为集合点,它是多个线程之间的同步点。屏障是为特定数量的线程(n)配置的,当线程到达屏障时,它们必须等到所有 n 个线程已经到达。一旦第 n 个线程到达屏障,所有等待的线程都可以继续,屏障被重置。
从 Boost 1.54 开始,屏障(等待)的主要功能的实现如下所示:
可以看出屏障是可重复使用的:一旦构建,第一次使用后不需要销毁。
我现在的问题是:变量 m_generation 是干什么用的?我假设 boost 库的作者有理由包含它。每次重置/准备重用屏障时,它都会增加,但目的是什么?它是一个私有变量,因此无法从外部读取。同样的问题可以很容易地在 wait() 函数中使用一个简单的内部 bool 变量来解决,而无需使用私有类变量。
c - 在 C 中实现线程屏障和屏障重置的正确方法是什么?
我试图在我的代码中实现一个简单的屏障,如下所示:
然后代码中有一个屏障用法:
到目前为止一切顺利,但我应该在哪里将我的g_barrier变量重置为零?如果我写类似
在waitOnBarrier调用之后,如果其中一个线程比其他线程更快地从屏障中释放并在所有其他线程仍在执行循环指令时使g_barrier无效,那么我将遇到问题,因此最终它们将永远卡在屏障上.
解释: waitOnBarrier会编译成这样的东西(伪代码):
因此,如果我们有 2 个线程在屏障上同步,并且thread_1在指令 3 或 4 的某处变慢,而更快的thread_2到达屏障,通过它并继续到g_barrier无效流程。这意味着在thread_1到达指令 2 之后,它将在 [barrier] 处看到零值,并将永远卡在屏障上!
问题是,我应该如何取消g_barrier,它在代码中的哪个位置“足够远”,我可以确定到那时所有线程都离开了屏障?还是有更正确的方法来实施障碍?
javascript - 如何使用“异步”实现屏障?
我想知道,您将如何使用node.js
'async
模块实现屏障?
我想我应该使用一个函数来向调用者返回由async
. 在所有这些都被调用后,将运行完成回调。
但是 的哪些async
功能可能有帮助?
c - netbeans 中的 C pthread_barriers (cygwin)
我想在 netbeans 中编写一些学校的 C 任务。他们给了我们必须使用 pthread_barrier 的任务。所以我用 gcc、g++、gdb 和 make 下载了 netbeans 和 cygwin。In pthreads.h
is not any pthread_barrier_t
etc. 在这个问题中,我发现“障碍是在 POSIX 1003.1 2004 版的可选部分中定义的”。Qustion 是如何在 cygwin 中使用 netbeans 中的障碍?
一些代码:
multithreading - 实现同步屏障
在此网站http://www.cs.cornell.edu/courses/cs4410/2010fa/synchreview.pdf上,它说必须以下列方式实现多次迭代的屏障:
如果我们只使用一个简单的 if-else 语句,会不会更简单:
我不明白所有额外的努力。感谢大家。
multithreading - 为什么与信号量解决方案会合不能泛化(我们使用屏障代替)?
对于集合点问题,我们需要同步两个线程,这是一个经典的解决方案:
线程 A:
线程 B:
这适用于两个线程,但是 N 个线程呢?对于 N=3,我们可以这样实现:
线程 A(其他线程是对称的):
我发现的所有来源都只是声明:“再次考虑第 3.2 节中的 Rendezvous 问题。我们提出的解决方案的一个限制是它不适用于两个以上的线程。” ,或“之前提出的解决方案不适用于两个以上的线程。” .
(顺便说一句,这里提出的通用解决方案可能不是最优的,因为它会为 N 个线程使用 N 个信号量......我只是好奇是否有人有这种解决方案不适用于 N>2 个线程的场景?)
python - Python 2.7 多处理屏障
我正在使用 Python 2.7,并且一直在将多线程代码转换为多处理代码以避免 GIL 锁定问题。但是,我在多处理模块中没有看到障碍实现(任何想法如何实现?)。
我看到了这个问题: Is it possible to use multiprocessing.Event to implement a synchronization barrier for pool of processes? 但我不确定它是否能正常工作,因为它不使用任何锁!
谢谢!
c - Find max in array using threads?
How would you do this in c with a binary reduction and a barrier implemented using binary semaphores? This is the code I have so far. It doesnt have a barrier, and I'm confused on how to make one. Would I need mutex locks for this?
c - 线程永久阻塞在屏障上
我正在处理一项涉及使用各种线程同步机制的任务,但唯一让我头疼的是 pthread_barrier_t。
这个想法是将屏障实现为几个线程的检查点,但它们会永久阻塞。
我在这里检查了一些答案,我的实现似乎是正确的,甚至编译并运行了这个简单的答案,没有任何问题。
cpu.c(包含主线程):
units.c(包含其他线程的函数):
一些注意事项:
- 我引用的两个文件都有自己的头文件
- 我小心地删除了一些代码以使其更短
- 反正函数体大多是空的,我在等屏障工作
- 还删除了错误检查以保持代码简短(执行时没有错误)
- 屏障计数反映了几个线程的删除
- 屏障在 cpu.h 上
谢谢!
cuda - 有什么办法可以在主机控制的设备代码中设置障碍?
例如,我的代码是这样的(但它不起作用并且内核停止):
无论如何我可以做到这一点吗?