如何在Java中用信号量实现障碍。下面的伪代码会起作用吗?如何使用java信号量类编写它。
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);
}
}发布于 2010-10-15 00:28:32
1)您的伪代码不使用信号量,所以它不是解决方案。
2)它与Java原语互斥/等待/通知的工作方式不一致。
3)它可能无论如何都行不通。由于您在获得条件之前释放互斥对象,因此存在种族条件的潜在性。(还不完全清楚情况是否如此,因为“原语”的语义是可以解释的。)
提示:您需要做的是彻底地读取信号量类的javadocs,然后尝试将它们映射到您要解决的问题上。
发布于 2010-10-15 00:23:55
只需使用CountDownLatch或CyclicBarrier即可。
https://stackoverflow.com/questions/3938560
复制相似问题