问题标签 [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 回答
182 浏览

java - CyclicBarrier:导致屏障跳闸“y”的“x”个线程完成它们的执行并终止

我有一个 CyclicBarrier,当有“x”个方(线程)等待它时,它会跳闸。在这些“x”线程中,“y”的生命周期非常短,并且在成功完成执行后会很快终止。现在,屏障一直在等待并超时,因为它一直在等待“x”个线程。我该如何解决这个问题?

现在说 task1,调用 write() 5 次,task2 调用 write 500 次。然后 task1 将在遇到障碍 5 次后终止,但 task2 将继续运行。

0 投票
3 回答
1694 浏览

java - 使用 CyclicBarrier 的 Java 循环线程

我有一个具有这种一般结构的程序:

我的问题是我需要线程的 run() 方法保持循环,直到满足某个条件,但在每次迭代后暂停以让所有线程同步。

我已经尝试将 Runnable 方法附加到屏障,但这最终需要重新创建和重新启动每个线程,这不是一个很好的解决方案。

我也尝试过使用 CyclicBarrier 的 reset() 方法,但这似乎只会导致现有线程出错,即使在所有线程完成后执行也是如此。

我的问题是:

- 是否可以“重置”一个屏障并让所有屏障的线程遵循与第一次调用 await() 之前相同的条件?

-或者我应该使用另一种方法来实现这一目标吗?

提前致谢

0 投票
1 回答
1945 浏览

java - ExecutorService 与 Runnable 共享 CyclicBarrier

我在使用共享 a 的 n Runnable 类的 Java 并发解决方案中遇到问题CyclicBarrier,并且Runnable由 a 处理ExecutorService,这是代码:

一切从主要开始:

问题是Runnable没有超过运行中的第一个“迭代” Chief,所以问题似乎是工人没有超过writerBarrier.await();,而是如果我初始化了这个:

workers.size(), 有效,但似乎不同步...我该如何解决?

0 投票
1 回答
6403 浏览

java - 何时在 java 多线程中重置 CyclicBarrier

我正在阅读CyclicBarrier以下链接 http://java-latte.blogspot.in/2013/10/cyclicbarrier-in-java-concurrency.html

在示例 1 中,CyclicRaceDemo.javamain 方法中,CyclicBarrier 被重用,无需调用reset方法。

我运行了这个例子,它运行良好。所以,我想知道reset方法的用途是什么。什么时候应该调用它?还是我们需要调用它?

0 投票
1 回答
72 浏览

java - CyclicBarrier 启动执行不同逻辑的并行线程

下面的代码似乎不是并行运行的,而是一个接一个地发出请求,甚至在每个单独的线程上调用 await() 方法。有人可以帮助并行调用这个线程吗?

0 投票
1 回答
154 浏览

java - 避免在 CyclicBarrier 上耍花招的想法

我正在运行一些并行处理的测试,并制作了一个程序,给定一个整数矩阵,根据邻居重新计算每个位置的值。

CyclicBarrier我需要一个矩阵的副本,以便在解决部分问题后不会覆盖这些值并使用 a来合并结果:

每个任务都被分配了矩阵的一部分:我将它逐行分成相等的部分。但是可能会发生分区不准确的情况,因此会有一小块对应于最后一行不会提交到线程池。

示例:如果我有16行并且n_tasks = 4没有问题,则所有 4 个都将提交到池中。但如果我有18,前 16 个将被提交,而不是最后两个。

因此,如果发生这种情况,我将强制提交。好吧,我实际上并没有提交,因为我使用的是这样创建的固定线程池ExecutorService e = Executors.newFixedThreadPool(n_tasks)。由于池中的所有槽都被占用并且线程被屏障阻塞(mybarrier.await()在方法中调用run)我无法将它提交到池中,所以我只使用了Thread.start().

让我们进入正题。由于我需要考虑CyclicBarrier该块剩余的可能性,因此必须将参与方的数量增加 1。

但如果这种情况没有发生,我将是一个不足触发障碍的一方。

我的解决方案是什么?:

cyclic_barrier.await()使用绝招强行提升结界的时候,感觉像是在作弊。

有没有其他方法可以解决这个问题,所以我不必做我正在做的事情?

0 投票
1 回答
234 浏览

java - 工作线程上的 CyclicBarrier

我有一个函数可以将数组拆分成更小的部分。
然后在单独的线程中评估每个部分。
结果被填充到一个通用列表中。

我本来希望 sortandkeep 递归等待障碍被打破。
当所有工作线程都调用了 await 时,就会发生这种情况。
然而,事实并非如此。
主线程不断递归 - 无论工作线程的状态如何。这是怎么回事?

0 投票
0 回答
98 浏览

java - 如何在 servlet 中使用 CyclicBarrier?

您好,这是我关于 java 线程的第一篇文章...我阅读了JavaWorld 线程文章非常有用的文章,并尝试使用线程来加速 servlet 的处理。

在我的 web 应用程序中,我有一个 servlet 需要花费大量时间来处理..实际上主要有 3 种方法很长,我想使用 CyclicBarrier 并行执行 3 种方法...但是很困惑如何在 servlet 中使用它.. .

这是我尝试过的一些演示代码..

输出...

预期输出..

0 投票
2 回答
1000 浏览

java - java中的循环障碍

我有一个需要由三方填充的列表(线程,可以说)。我正在使用循环障碍来实现此功能。一切正常,除了我无法在不引起强制睡眠的情况下使用结果列表。下面是代码:

下面是我的 CyclicBrrierTest 课程:

因此,如果我在没有任何延迟的情况下运行此代码,则我的 main 方法中的 print 语句将我的列表长度设为零,但是在给予适当的睡眠后,它会给我预期的输出。我想在没有任何延迟的情况下实现相同的目标。任何帮助,将不胜感激。提前致谢。

0 投票
1 回答
210 浏览

java - CyclicBarrier 误解

我尝试从其中一个教程中使用 CyclicBarrier 运行示例:当空打印机的队列为 3 时,服务人员应填充空打印机。但是当我运行代码时,似乎打印机在队列中填充了 2、3 或 4 个空打印机:

打印机 1 为空

打印机 12 为空

打印机 14 为空

打印机 13 为空

填充 [Printer1、Printer12、Printer14、Printer13]

打印机 2 为空

打印机 7 为空

填充 [打印机 2、打印机 7]

那么这个例子是错误的还是我对 CyclicBarrier 的理解?我认为队列应该正好是 3 个元素的大小。我应该在代码中添加什么来解决这个问题?提前致谢。

代码: