问题标签 [cyclicbarrier]

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 回答
169 浏览

java - 屏障同步(输出、增量和等待)

我想让同步线程互相等待。在示例程序中,每个线程最多计数为 100。我希望线程每 10 个输出等待一次。

因为我正在准备考试,所以我想使用CyclicBarrier方法。

这是代码:

和主班

如何插入障碍?

0 投票
1 回答
68 浏览

java - 为什么在屏障动作执行后无法立即获取 cyclicBarrier?

让我们考虑以下代码:

我创建了大小 = 3 的屏障和需要 5 秒的屏障动作。

我看到以下输出:

所以我们可以看到:

  1. 第一次障碍行动持续 15:23:09 - 15:23:14
  2. 第二个障碍行动持续 15:23:14 - 15:23:19

但在第一次屏障操作终止后,只有一个线程能够记录:

我预计 3 个线程应该能够在大约 15:23:14 获得,因为 CyclicBarrier 大小为 3。

你能解释一下这种行为吗?

附言

我试图运行这段代码很多时间,并且总是得到类似的结果。

PS2。

我试着改变一下时间:

我看到了预期的结果:

0 投票
2 回答
486 浏览

java - 主线程等待两个并行线程子java

首先我想做的是:

在主线程执行期间,我想暂停主线程并启动两个并行线程。一旦这两个并行线程终止,我想从主线程重新开始。

我尝试了什么:

线程构建器自定义类

目前尚不清楚这里发生了什么,但它肯定不起作用。一旦我调用加入,一切都会停止,主线程永远不会重新启动。(我在连接之后放置了一个断点,以查看主线程何时重新启动)。

也许这些概念有点混乱,而且我不确定我是否需要同时使用屏障和连接,或者只是其中一种技术。

谢谢

戴维德

0 投票
1 回答
86 浏览

java - CyclicBarrier.getNumberWaiting() 准确吗?

我分析了jdk1.8中的代码,但在其他jdk版本中可能有同样的问题

  1. 让我们假设以下代码中的当事方 = 3

    CyclicBarrier cb = 新的 CyclicBarrier(3);

在此处输入图像描述

party = 3 and count > = 0,所以getNumberWaiting()的返回值<= 3 但是在某些情况下,会有超过3个线程在等待 2.让我们看看CyclicBarrier中的关键代码

在此处输入图像描述

a) 位置 2 的线程 A 将返回 0,现在位置 3有 2 个线程等待

b) 线程A执行lock.unlock()后,位置1的线程B得到锁(但锁不公平),所以现在index = 2,count =2,它会在位置3等待,所以现在有3线程在位置 3等待

c) 假设,锁总是由位置1的线程获得,所以等待线程的数量会越来越多

所以getNumberWaiting() > 3是结果

getNumberWaiting() = (循环数) * 各方 - 计数

0 投票
1 回答
28 浏览

java - 循环障碍浪费时间

我正在实现一个并行算法。如果没有 CyclicBarrier,我可以在一半的顺序时间内完成工作。使用 CyclicBarrier 最多可以延长 100 倍。我将包括我的线程调用和线程函数,这样您就可以看到发生了什么并尝试帮助我。CyclicBarrier 被重用并且每次都产生新线程。由于某种原因,TRY(barrier.await;) 位旋转了很长时间。

0 投票
0 回答
31 浏览

java - 使用 CyclicBarriers 进行服务器和客户端之间的持续通信

我已经为服务器和客户端之间的通信设置了套接字,并在服务器上运行了多个客户端连接的线程。此外,我现在正在服务器和客户端之间发送字节数组以获取数据,但是我正在考虑实现循环障碍,以使服务器在向每个客户端发送不同的消息之前等待特定数量的客户端连接。

这种通信和等待将需要持续进行,例如,一旦建立了客户端连接的阈值并发送了消息,服务器现在应该再次等待消息从每个客户端返回,可能是不同的消息。这至少应该持续几次迭代,我想知道我是否为这个过程实施循环障碍,我会去寻找这个过程的最佳解决方案吗?

这是循环障碍的预期用途还是我的想法有更好的选择?

为简单起见,我打算等待 2 个客户端连接。还将强制执行超时条件以处理可能的故障。

0 投票
0 回答
20 浏览

multithreading - 使用 Cyclic Barrier 确保 3 个线程将依次运行

通过使用,等待/通知或加入或 2 个倒计时,我可以让 3 个线程按顺序运行。

如何通过循环障碍实现类似的?

0 投票
1 回答
65 浏览

java - 如何在不使用 Java 库中的 CyclicBarrier 的情况下制作自己的 CyclicBarrier

我在大学的 PacMan 游戏中工作,基本上我必须制作自己的 CyclicBarrier,因为我不能使用 Java 中的 CyclicBarrier 库。当幽灵到达特定位置(GhostGoal)时,此屏障将用于保留幽灵,并且他们必须等待更多幽灵,直到我的 CyclicBarrier 的构造函数中给出的最大幽灵。Ghosts 对象实现了可运行(线程)。

我以这种方式构建我的 CyclicBarrier:

而我调用屏障的代码(在用名称 barreira 初始化它之后)以这种方式位于这个空白中:

但是,当一个幽灵到达该位置时,所有幽灵都停止移动,不仅是该位置的幽灵......基本上一切都冻结了,因为我的屏障中的等待称为barreira。

任何人都可以帮忙吗?

非常感谢。

我也在考虑这个解决方案(删除等待方法并仅使用 adiciona 方法:

什么是最好的解决方案?

0 投票
2 回答
63 浏览

java - 为什么 CyclicBarrier.await(int timeout,TimeUnit unit) 没有在这里抛出 TimeOutException?

说话便宜。显示代码。

MyCyclicBarrier.java

TestCyclicbarrier.java

输出:

我在网上找了很久。但没有类似的答案。请帮助或尝试给出一些想法!而我刚刚开始学习CyclicBarrier

我想知道我是否误解了CyclicBarrier.await(int timeout,TimeUnit unit)。线程 0 到 3 已经到达了花费 2s 的障碍点。同时,最后一个线程在等待 2s 后启动。1 秒后,0 到 3 线程达到指定的超时时间,4 号线程仍然执行自己的代码。问题来了:为什么没有CyclicBarrier.await(int timeout, TimeUnit unit) 扔到TimeOutException这里?

0 投票
2 回答
59 浏览

java - 在 CyclicBarrier 中访问屏障动作的输出

我在 oracle 博客上练习了这个关于之前发生的问题,我有一个问题是如何在 CyclicBarrier 中获取/访问屏障动作的输出。

博客链接

https://blogs.oracle.com/javamagazine/post/quiz-yourself-happens-before-thread-synchronization-in-java-with-cyclicbarrier

编码

请告诉我如何获得ansmain方法中循环障碍动作的值?