在Java中实现障碍

时间:2010-10-15 00:19:07

标签: java

如何在Java中使用信号量实现障碍。以下伪代码是否有效?如何使用java Semaphore类编写。

N是要在屏障处等待的线程数。 EveryoneHasReachedBarrier是一个条件变量。

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);
   }
}

2 个答案:

答案 0 :(得分:2)

只需使用CountDownLatchCyclicBarrier

答案 1 :(得分:0)

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

2)它与Java原始互斥/等待/通知工作的方式不对应。

3)无论如何它可能都行不通。由于在获取条件之前释放互斥锁,因此可能存在竞争条件。 (目前尚不完全清楚,因为你的“原语”的语义可以解释。)

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