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

java - 对具有不同线程数的两个对象使用 CycleBarrier

我手头有以下任务:

想象一下,有 4 名开发人员为 IT 解决方案实施功能,并且有 2 名测试人员来验证他们的工作。项目经理为这个项目制定了一个(有争议的)策略:他不希望测试人员在所有开发人员完成他们的工作之前开始验证这个应用程序。此外,他不希望开发人员在所有测试人员完成工作之前就开始修复报告的缺陷(更改应用程序)。要协调这些任务,请使用 CyclicBarrier 类。

经过一些研究和教程后,我设法编译了以下代码,以便为每个 CycleBarrier 使用 2 个线程:

和 CyclicBarrierRunnable 类:

我的问题是,如果第一个 CyclicBarrier 有 4 个方而不是 2 个方,我如何使应用程序运行。如果我尝试CyclicBarrier barrier1 = new CyclicBarrier(4, barrier1Action); CyclicBarrier barrier2 = new CyclicBarrier(2, barrier2Action);仅使用前 2 个线程来运行它

0 投票
1 回答
68 浏览

java - n 个线程的 Cyclic Barriers 也可以处理 n*2 个线程

我已经实现了一个简单的循环障碍,但从快速测试中我意识到,如果你为 2 个线程设置障碍,但有 4 个线程即将到达 barrier.await(),那么你将获得 2 个线程对实例同时在临界区。同样,使用 6 个线程将同时在关键部分获得 3 对线程(由于我是新手,所以没有很好地测试)

我的问题是,如果 n 个线程通过障碍并进入临界区,如何在临界区已在使用时阻止其他 n 个线程组进入临界区?

提前致谢。

0 投票
2 回答
1067 浏览

java - 什么是 C++ 版本的 Java 循环屏障?

在java中,多个线程可以在某个点等待所有其他线程,这样它们就不会在所有其他线程完成第一个块之前开始一个新的代码块:

是否有准确或简单的转换为 C++?

OpenCL 也有类似的指令:

所以所有相邻线程都互相等待,但这只是一个受约束的 C 实现。

0 投票
0 回答
44 浏览

java - 在 android Volley 中实现互斥锁/屏障

我的 recycleview 中有 20-30 辆车。我必须从 API 加载它们的当前价格。每 20 分钟它们的价格就会变化。为了保持最新的价格,我对每一个都有截击请求。

问题是如何adapter.changeDataSetNotify()在所有响应完成后调用方法。

0 投票
0 回答
23 浏览

java - CyclicBarrier 的附加同步

我的代码是这样的:

关于线程安全同步器有些混乱。这里有一些相当简单的代码,我想得到如下输出:thread1、thread2、thread3 和来自 Runnable 的消息,但似乎存在竞争条件:

那么,我应该添加 reentrantlock 还是其他什么来修复它?

0 投票
1 回答
330 浏览

java - 无法使用 CyclicBarrier 的 CountDownLatch 用例

对我来说,CountDownLatch 和 CyclicBarrier 之间的区别仅在于 CyclicBarrier 提供了比 CountDownLatch 更多的功能,例如当所有线程都到达障碍点时,您可以执行某个任务。您可以在循环屏障中找到没有等待线程和没有到达线程。所以这意味着我们可以在所有使用 CountDownLatch 的地方使用 CyclicBarrier。如果我错了,请纠正我。那么为什么在java中给出CountDownLatch。如果我们可以使用 CyclicBarrier 执行这些功能,为什么它不会被弃用。

0 投票
1 回答
119 浏览

java - 安全使用 CyclicBarrier.reset

CyclicBarrier.reset javadocs 中,提到了以下内容。

请注意,由于其他原因发生破损后的重置可能会很复杂;线程需要以其他方式重新同步,并选择一个执行重置

考虑到上面的提示,如果我使用 isBroken() 方法确保屏障没有被破坏,那么调用 reset() 方法是否安全?

0 投票
0 回答
44 浏览

java - 使用同步等待/通知完成会阻止程序运行 Android

我试图停止 for 循环并等到该方法完成并在它调用后继续onFinish。有人建议我使用CyclicBarrieror syncronized wait/notify,但它们都不起作用。

当我在没有 的情况下运行该方法时"stoppers",它总是到达onFinish,调用所有 3 System.out.prints,但是当我添加任何一个时CyclicBarrier or syncronized,它就不会启动ticking。这意味着它只打印第一行countDownTimer first call然后停止并且什么也不做。
只是为了让它更短,我在stoppers这里添加了两者来展示我是如何做到的,但我确实分别使用了它们。

我能做些什么来做到这一点"tick"

如果我理解正确,那么还提到我在 UI 线程上运行我的循环,这就是一切都停止的原因。好吧,我不想停止 UI 线程,只是等待一个countDownTimer完成,然后开始一个新的循环。

0 投票
2 回答
66 浏览

java - 根据邻居的值更新多线程单元。如何继续使用 CyclicBarrier?

我正在尝试完成以下任务:

  1. 从用户那里获得两个输入 (lengthamountOfCycles)
  2. length创建一个包含线程数量的数组。每个包含value范围内的整数[1, 100]
  3. 循环amountOfCycles + 1次数并在每次迭代时执行以下操作:
    1. 打印数组的值。
    2. 根据其(循环)邻居更新数组中的每个值:
      • 如果值小于两个邻居的值:将值增加 1
      • 如果该值大于两个邻居的值:将该值减 1
      • 如果当前值小于或等于一个邻居,并且大于或等于另一个邻居:保持该值不变

根据它们的邻居更新这些值是它成为多线程的原因。请注意,这只是练习多线程的东西。通过简单地一起删除线程并创建数组的副本(我已经做过) ,我可以轻松地完成上述操作。

到目前为止,这是我的代码:

这是基于这个 SO question and answer及其接受的答案

我上面的代码目前做了什么:

它使用随机值多次打印数组amountOfCycles + 1,但不会在周期之间更改任何值。这是由于IllegalMonitorStateExceptions我得到的。可能是因为我需要一个synchronized(barrier){ ... }地方,因为barrier在课堂Main上而不是Cell?但是,将其添加到类的run-methodCell会导致程序不再打印任何内容,也不会终止..

在我上面的代码中,在一个在线编译器中查看当前(不正确的)结果。

我期望它做什么:

每次循环后修改数组中的值。

0 投票
0 回答
89 浏览

java - Control order of threads after cyclic barrier has completed its action?

Is there any way I could control the order in which threads should resume its work after cyclic barrier "Barrier Action" has been completed?

Following is an example which I tried but order of final 2 statements keep changing but I don't want that to happen.It should always be:-

Code:-

Output:-