如何在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);
}
}
答案 0 :(得分:2)
答案 1 :(得分:0)
1)您的伪代码不使用信号量,因此它不是解决方案。
2)它与Java原始互斥/等待/通知工作的方式不对应。
3)无论如何它可能都行不通。由于在获取条件之前释放互斥锁,因此可能存在竞争条件。 (目前尚不完全清楚,因为你的“原语”的语义可以解释。)
提示:您需要做的是彻底阅读Semaphore类的javadoc,然后尝试将它们映射到您要解决的问题上。