问题标签 [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.

0 投票
1 回答
77 浏览

java - Java 循环屏障

我有多个线程发送相同的数据包,并希望所有线程在继续发送下一个数据包之前完成。

我使用以下代码测试了 CyclicBarrier:测试代码(太长/太乱而无法嵌入) 这按预期工作,打印 0 - 4 的组合,然后在循环中完成

对于数据包发送方,代码是等价的,除了 for 循环是:

发送是:

RSocket.send(数据包); 功能与常规套接字的 writeObject() 函数相同,除了它会阻塞直到完成(当它接收到 ACK 时)。假设网络方面是正确的,我是否正确使用了 CyclicBarrier?

PS我应该指出,如果我使用for循环而不启动新线程,它会按预期工作,即:

0 投票
1 回答
1283 浏览

c - 线程屏障同步

我想在线程上实现屏障同步技术

到目前为止,我已经提出了一些代码,但我有一些问题..

所以我对互斥体有一些疑问。我确信在进入函数时。enterBarrier 我必须锁定互斥体,这样就没有其他线程得到它并改变它,同时“等待”!但是我解锁了互斥锁和代码的结尾,由于锁定的互斥锁,我不确定其他线程是否会进入 enterBarrier。

我不完全确定这个互斥锁是如何工作的。

0 投票
3 回答
1366 浏览

memory-management - 为什么我们不在用户空间中使用障碍

我正在阅读有关内存屏障的内容,我可以总结的是它们阻止了编译器完成的指令重新排序。

所以在用户空间内存中可以说我有

编译器是否可以重新排序此代码,以便在调用b = 20之后进行分配。c = add()

为什么我们在这种情况下不使用障碍?我在这里缺少一些基本知识吗?

虚拟内存是否免于任何重新排序?

进一步扩展问题:

在网络驱动程序中:

当他说设备看到更新的数据时......如何将其与使用障碍的多线程理论联系起来。

0 投票
1 回答
156 浏览

synchronization - 在 D 中跨线程共享屏障

我有一段时间试图让 D 中的屏障同步正常工作。我目前没有收到任何编译器错误,但是每次到达障碍时我都会遇到分段错误。这基本上是我所拥有的:

我已经尝试在主函数中完全定义屏障,但 dmd 抱怨:

我也尝试将它作为共享变量传递,我得到了这个:

0 投票
1 回答
3782 浏览

c - C 中的 Pthread 障碍是否可重用?

所以我知道你可以在 C 中创建屏障来控制线程程序的流程。您可以初始化屏障,让您的线程使用它,然后销毁它。但是,我不确定是否可以重复使用相同的屏障(比如它是否在循环中)。或者您必须为第二个等待点使用新的屏障?例如,下面的代码是否正确(重用相同的屏障)?

0 投票
1 回答
739 浏览

swift - 命令行工具 Xcode 的控制台中没有打印任何内容

当我运行以下代码时,命令行工具 Xcode 的控制台中没有打印任何内容:

我在控制台中看不到任何打印语句。如果我删除障碍线效果很好。在这种情况下我做错了什么,为什么我的障碍不允许打印?

0 投票
0 回答
343 浏览

c - 带有自定义 MPI Communicator 的 MPI_Barrier

我正在尝试为 MPI_COMM_WORLD 中的一部分进程设置 MPI_Barrier,如下所示:

(其中ranks是所需秩的数组,是该数组num的大小) 上面的代码在 MPI_Barrier 处导致 NULL 通信器错误。

我还尝试了以下方法:

color如果当前排名在所需的子集中,则设置为 1,否则设置为 0)上面的代码没有效果,屏障似乎根本不起作用。

任何帮助将不胜感激,谢谢:)

0 投票
1 回答
1197 浏览

c - MPI_Barrier - 只有一些进程通过屏障

我面临只有一些进程绕过该MPI_Barrier功能的情况。

问题出现在这段代码中:

用 4 个进程运行它后,我有以下输出:

应用程序冻结。

我期待所有进程都能够打印消息[id] After barrier,但只有进程1打印了它。

为什么不是所有进程都通过障碍?

我期待这样的输出:

我在docker里面使用openmpi和centos。应用程序启动了多个线程,但显示的片段不在其中任何一个线程中。

0 投票
1 回答
897 浏览

c++ - 为什么 MPI_Barrier 在 C++ 中会导致分段错误

我已将我的程序简化为以下示例:

我编译并运行代码,得到以下结果:

如果我注释掉 MPI_Barrier,或者只在一个节点上运行程序,代码运行良好。我正在使用以下编译器:

这似乎应该是一个微不足道的问题,但我似乎无法弄清楚。为什么 MPI_Barrier 会导致这个简单的代码出现段错误?

0 投票
1 回答
115 浏览

java - 释放所有等待线程

我正在写这个模拟障碍点的类。当一个线程到达这个障碍点时,它不能继续,直到其他线程也到达这个点。我正在使用计数器来跟踪此时已到达的线程数。假设该类需要 N+1 个线程,但只给出了 N 个线程。在这种情况下,程序将让所有线程等待,因为它认为还有一个线程要到达。

我想写一个方法,不管程序是否认为还有更多的线程要到达障碍点,我都可以释放所有等待的线程。

我的程序等待所有线程,

我在想我可以简单地创建一个调用该signalAll()方法的方法,并且所有线程都是空闲的。但是,我遇到的一个问题是,如果程序需要更多线程,它将保持锁定,因为它将在第 20 行等待。

有没有办法绕过这个锁?我应该如何解决这个问题?