Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
屏障在Java中的实现_Java - Fatal编程技术网

屏障在Java中的实现

屏障在Java中的实现,java,Java,如何在Java中用信号量实现屏障。下面的伪代码可以工作吗?如何使用java信号量类编写 N是在屏障处等待的线程数。 每个人都达到了障碍是一个条件变量 Aquire(mutex) m = m + 1; if(m != N) { Release(mutex); Aquire(EveryoneHasReachedBarrier); } else { m = 0; Release(mutex); for(i=0; i<N; i++) { Re

如何在Java中用信号量实现屏障。下面的伪代码可以工作吗?如何使用java信号量类编写

N
是在屏障处等待的线程数。
每个人都达到了障碍
是一个条件变量

Aquire(mutex)
m = m + 1;
if(m != N)
{ 
    Release(mutex);
    Aquire(EveryoneHasReachedBarrier);
}
else
{
   m = 0;
   Release(mutex);
   for(i=0; i<N; i++)
   {
       Release(EveryoneHasReachedBarrier);
   }
}
Aquire(互斥)
m=m+1;
如果(m!=N)
{ 
释放(互斥);
阿奎尔(每个人都已到达屏障);
}
其他的
{
m=0;
释放(互斥);
对于(i=0;i只需使用a或a.

1)您的伪代码不使用信号量,因此它不是解决方案

2) 它与Java原语互斥体/等待/通知的工作方式不一致

3) 无论如何,它可能不会起作用。由于在获取条件之前释放互斥体,因此可能存在竞争条件。(目前还不完全清楚是否存在这种情况,因为“原语”的语义是可以解释的。)


提示:您需要做的是彻底阅读信号量类的javadocs,然后尝试将它们映射到您试图解决的问题上。

我们不会为您做功课。请发布您已经编写的代码,我们会提供帮助。啊……但OP本质上想知道如何使用信号量实现这些e类…作为家庭作业。他可以查看这两个类的源代码,并在这个过程中学习一些有用的东西。或者完全不通过复制来学习任何东西。理解并发编程的最好方法是通过自己尝试解决它的思维过程。谢谢,只有一个问题。可以使用一个信号量对象完成吗?@Ajex-既然这是家庭作业,我的回答如下:“好问题。你认为答案是什么?为什么不试试看你是否能用一个信号灯工作?”我认为单个信号量变量无法跟踪多个线程。它无法知道所有线程都来自哪个线程。如果有线程a、B、C、D,我需要知道是否所有线程都已到达。而不是a、B、C、ASo,请尝试使用两个信号量的解决方案。