Я подозреваю, что существенная разница между мьютексом и семафором заключается в том, что подсчет семафора поддерживает максимальный доступ более одного, поскольку mutext поддерживает только один доступ за один раз.реализация семафора с использованием java
Но при осуществлении реализации следует следующее:
public class countingSemaphore{
private static final int _MOSTTABLES = 3; // whatever maximum number
private static int availtable = _MOSTTABLES;
public synchronized static void Wait(){
while(availtable==0){
try{
wait();
}
catch(InterruptedException e){
e.printStackTrace();
}
}
availtable--;
}
public synchronized static void Signal(){
while(availtable==_MOSTTABLES){
try{
wait();
}
catch(InterruptedException e){
e.printStackTrace();
}
}
availtable++;
}
}
проблема заключается в вызове нестатического метода wait() объекта. Но я должен применять синхронизацию к классу вместо экземпляров объектов, поскольку доступ к ним используется несколькими экземплярами.
Как разрешить ошибку wait()? У нас есть другой метод в java или нам нужно реализовать wait() сами?
Знаете ли вы, что в 'java.util.concurrent' уже есть классы' Семафор' и 'CountdownLatch', или вы перепрограммируете этот материал для домашней работы? – skaffman
, скорее всего, домашнее задание, если вы не делаете java в ограниченном env, который запрещает параллельный материал и должен его реализовать самостоятельно ... – Chii