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

java - 从 CyclicBarrier 中排除特定线程

对于我的作业,我必须做一个游戏,让几个国王在棋盘上移动。每个国王必须在自己的线程中从他独特的开始位置移动到独特的结束位置。在采取行动之前,国王必须睡最多 10 毫秒(有点随机),然后等待其他人采取行动。

我已经解决了国王等待对方采取行动CyclicBarrier的问题,但是当其中一个国王到达他的结束位置从而停止他自己的线程时,问题就出现了。然后CyclicBarrier等待线程调用 await() 方法,但这永远不会发生,因为线程不再运行。

有什么建议么?

0 投票
3 回答
451 浏览

java - 障碍分解示例

我正在阅读Java Concurrency in Practice一书,它说,

CyclicBarrier允许固定数量的参与方在障碍点重复会合,并且在将问题分解为固定数量的独立子问题的并行迭代算法中很有用。

有人可以举例说明它如何将问题分解为多个独立的子问题吗?

0 投票
2 回答
1413 浏览

java - implementing cyclicbarrier using threads and semaphores for specific thread types in java

&& here is class semaphore just in case

This is a code that I wrote to implement Cyclicbarriers using threads. I took the pseudo code from the book along with the notes on deadlocks so I think its pretty much ok "there might be a bug though". The first phase is for "arriving threads" and the 2nd phase is for "running threads in the critical region together". My question is as follows... how to change the code in order to consider specific types of threads? For instance, there are hydrogen threads and oxygen threads and I want them to execute bond() everytime there are 2 hydrogen atoms and 1 oxygen atom at the barrier. Thank you in advance.

0 投票
1 回答
2774 浏览

java - 使用信号量在java中实现循环障碍

问题如下,因为仅使用 down() 调用屏障,因此它将等待 n 个线程到达,然后在关键区域中一起执行所有 n 个线程,现在我如何通知调用barrier.down的线程它现在可以继续前进。我尝试在phase2( )之后添加notifyAll()但这不起作用。帮助?:)

0 投票
1 回答
262 浏览

multithreading - CyclicBarrier 代码不起作用?

我从 oracle 页面获得了 CyclicBarrier 代码以进一步了解它。我修改了它,现在有一个疑问。下面的代码不会终止,但如果我取消注释 Thread.sleep 条件,它工作正常。

为什么在上面的代码中需要 Thread.sleep?

0 投票
0 回答
291 浏览

multithreading - 需要混合信号量/循环屏障

我正在开发一个分阶段的工作系统,目前工作如下(伪代码):

这会导致阶段中的所有作业在进入下一个阶段之前完成执行。

cyclicbarrier使用两个信号量实现:

我想添加对作业的支持,以便能够将 1 个或多个作业添加到当前运行的阶段,并让这些作业在阶段继续之前也执行。上面的代码将执行此操作,但是如果在线程到达屏障后添加此作业,那么它将以次优方式执行,因为等待线程可能正在执行它但不是。

我将问题归结为需要一种混合semaphore/ cyclicbarrier,为方便起见,我将其称为sembarrier. 以下是它的功能:

本质上,这sembarrier就像 a 一样工作semaphore,但是当有足够多的线程在它上面等待时,它的行为就像 acyclicbarrier并释放它们。

所以,这是使用sembarrier.

sembarrier构造函数看起来像:

sembarrier为每个阶段创建一个:

这将是修改后的循环,使用sembarrier数组:

此外,当添加到joblist

问题:

1)我怎样才能有效地实施sembarrier?我可以访问基本的并发结构,例如互斥体和信号量。我也有标准的原子操作。

2)我原来的问题有替代解决方案吗?

谢谢!

0 投票
1 回答
258 浏览

java - Visibility synchronization at CyclicBarrier?

When using a CyclicBarrier for synchronizing threads in Java, do they synchronize non-volatile variables?

Can we be sure that on Thread 1's doSomeStuff call b has been set to 3? When trying it's always 3...

0 投票
3 回答
315 浏览

java - Java中的控制多线程

我有一个“可运行”线程正在启​​动几个“可调用”线程,我想在所有上述线程完成工作时显示结果。

最好的方法是什么?

我的代码如下

Connector.java(启动可运行线程)

Traverse.java (Runnable Thread) 我正在使用 ExecutorCompletionService 来处理它......但它没有产生任何区别。:(

Search.java(可调用线程)

0 投票
1 回答
913 浏览

java - 循环屏障重用?

我目前正在尝试实现一个与机器通信的应用程序,它基本上应该按如下方式工作:

  • 程序向服务器发送一条消息(在本例中为文件的前 255 个字节)。
  • 机器以“消息成功接收”或“错误接收消息”响应进行响应。
  • 然后程序必须根据机器的响应决定是否发送下一条消息(下一个 255 字节)或不发送(最后一条消息出错,必须重新开始)。
  • 对于程序需要发送的每条消息,依此类推(取决于文件的大小)。

因此,我们考虑让一个线程进行发送,另一个线程进行接收,因为我们有一个 api 来注册一个类作为从机器接收消息的类(仅通过实现一个接口),以及向机器发送消息不是阻塞类型的,因此需要一种等待机器响应的方法,以便程序可以决定在响应到达后做什么。

因此,我们需要以某种方式同步这两个线程,因为可以确定它们将交换多少消息,这使我们尝试使用 CyclicBarrier。这是测试 CyclicBarrier 是否可以帮助我们解决这个问题的代码(程序实际上并没有使用套接字与机器通信,这只是为了测试屏障):

如果我们只发送一条消息(在 BlockingTest() 构造函数中没有 for 块,只发送消息),则此代码按预期工作,但在添加 for 块后,它不会按预期工作。它只在第一次工作,然后挂起:

问题是:

  • 如何使屏障可重复使用?是自动的还是必须手动完成?

  • 程序挂起是因为我错过了套接字(或屏障代码)吗?

0 投票
2 回答
1307 浏览

java - CyclicBarrier 未按预期工作

我正在尝试使用模拟 triatlon 比赛,CyclicBarrier但它没有按预期工作,我不知道为什么。

比赛的每一部分都要等到所有的跑者都完成了前一个,但似乎永远在等待。

这是第一阶段的一段代码: