对于我的应用程序,我需要确定,在关键会话中只有一种类型的线程正在处理。未指定给定类型的线程数,可能是“大”。我提供了简单的解决方案:
MutableInt a,b,c;
Semaphore mutex;
void enterA() {
while (true) {
mutex.acquire();
if (b.intValue() == 0 && c.intValue() == 0) {
a.increase();
break;
}
mutex.release();
}
}
void exitA() {
while(true) {
mutex.acquire();
a.decrease();
mutex.release();
}
}
我跳过异常处理和 B&C 部分导致它只是复制粘贴。
它按预期工作(线程饥饿的可能性是可以的),但生成的负载太大。线程不断检查计数器。我觉得还有另一种解决方案,但想不出任何例子。