问题标签 [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.
java - Java 循环屏障
我有多个线程发送相同的数据包,并希望所有线程在继续发送下一个数据包之前完成。
我使用以下代码测试了 CyclicBarrier:测试代码(太长/太乱而无法嵌入) 这按预期工作,打印 0 - 4 的组合,然后在循环中完成
对于数据包发送方,代码是等价的,除了 for 循环是:
发送是:
RSocket.send(数据包); 功能与常规套接字的 writeObject() 函数相同,除了它会阻塞直到完成(当它接收到 ACK 时)。假设网络方面是正确的,我是否正确使用了 CyclicBarrier?
PS我应该指出,如果我使用for循环而不启动新线程,它会按预期工作,即:
c - 线程屏障同步
我想在线程上实现屏障同步技术
到目前为止,我已经提出了一些代码,但我有一些问题..
所以我对互斥体有一些疑问。我确信在进入函数时。enterBarrier 我必须锁定互斥体,这样就没有其他线程得到它并改变它,同时“等待”!但是我解锁了互斥锁和代码的结尾,由于锁定的互斥锁,我不确定其他线程是否会进入 enterBarrier。
我不完全确定这个互斥锁是如何工作的。
memory-management - 为什么我们不在用户空间中使用障碍
我正在阅读有关内存屏障的内容,我可以总结的是它们阻止了编译器完成的指令重新排序。
所以在用户空间内存中可以说我有
编译器是否可以重新排序此代码,以便在调用b = 20
之后进行分配。c = add()
为什么我们在这种情况下不使用障碍?我在这里缺少一些基本知识吗?
虚拟内存是否免于任何重新排序?
进一步扩展问题:
在网络驱动程序中:
当他说设备看到更新的数据时......如何将其与使用障碍的多线程理论联系起来。
synchronization - 在 D 中跨线程共享屏障
我有一段时间试图让 D 中的屏障同步正常工作。我目前没有收到任何编译器错误,但是每次到达障碍时我都会遇到分段错误。这基本上是我所拥有的:
我已经尝试在主函数中完全定义屏障,但 dmd 抱怨:
我也尝试将它作为共享变量传递,我得到了这个:
c - C 中的 Pthread 障碍是否可重用?
所以我知道你可以在 C 中创建屏障来控制线程程序的流程。您可以初始化屏障,让您的线程使用它,然后销毁它。但是,我不确定是否可以重复使用相同的屏障(比如它是否在循环中)。或者您必须为第二个等待点使用新的屏障?例如,下面的代码是否正确(重用相同的屏障)?
swift - 命令行工具 Xcode 的控制台中没有打印任何内容
当我运行以下代码时,命令行工具 Xcode 的控制台中没有打印任何内容:
我在控制台中看不到任何打印语句。如果我删除障碍线效果很好。在这种情况下我做错了什么,为什么我的障碍不允许打印?
c - 带有自定义 MPI Communicator 的 MPI_Barrier
我正在尝试为 MPI_COMM_WORLD 中的一部分进程设置 MPI_Barrier,如下所示:
(其中ranks
是所需秩的数组,是该数组num
的大小) 上面的代码在 MPI_Barrier 处导致 NULL 通信器错误。
我还尝试了以下方法:
(color
如果当前排名在所需的子集中,则设置为 1,否则设置为 0)上面的代码没有效果,屏障似乎根本不起作用。
任何帮助将不胜感激,谢谢:)
c - MPI_Barrier - 只有一些进程通过屏障
我面临只有一些进程绕过该MPI_Barrier
功能的情况。
问题出现在这段代码中:
用 4 个进程运行它后,我有以下输出:
应用程序冻结。
我期待所有进程都能够打印消息[id] After barrier
,但只有进程1
打印了它。
为什么不是所有进程都通过障碍?
我期待这样的输出:
我在docker里面使用openmpi和centos。应用程序启动了多个线程,但显示的片段不在其中任何一个线程中。
c++ - 为什么 MPI_Barrier 在 C++ 中会导致分段错误
我已将我的程序简化为以下示例:
我编译并运行代码,得到以下结果:
如果我注释掉 MPI_Barrier,或者只在一个节点上运行程序,代码运行良好。我正在使用以下编译器:
这似乎应该是一个微不足道的问题,但我似乎无法弄清楚。为什么 MPI_Barrier 会导致这个简单的代码出现段错误?
java - 释放所有等待线程
我正在写这个模拟障碍点的类。当一个线程到达这个障碍点时,它不能继续,直到其他线程也到达这个点。我正在使用计数器来跟踪此时已到达的线程数。假设该类需要 N+1 个线程,但只给出了 N 个线程。在这种情况下,程序将让所有线程等待,因为它认为还有一个线程要到达。
我想写一个方法,不管程序是否认为还有更多的线程要到达障碍点,我都可以释放所有等待的线程。
我的程序等待所有线程,
我在想我可以简单地创建一个调用该signalAll()
方法的方法,并且所有线程都是空闲的。但是,我遇到的一个问题是,如果程序需要更多线程,它将保持锁定,因为它将在第 20 行等待。
有没有办法绕过这个锁?我应该如何解决这个问题?