我正在使用信号量来强制我的程序中的一些顺序:我有一个主线程和一些在主线程中创建的子线程。在每一步的主线程中,都会打勾,然后我希望每个子线程一个接一个地运行。子线程的顺序并不重要,但我希望它们都在每个步骤中运行(并且每个步骤只运行一次)。我已经写了这段代码,但问题是在某些情况下,子线程的一步运行多次不让其他人有机会运行?!
主线程:
Semaphore okToTick = new Semaphore(3);
Semaphore okToWork = new Semaphore(0, true);
int i = 0;
new TestClass2(0, okToTick, okToWork);
new TestClass2(1, okToTick, okToWork);
new TestClass2(2, okToTick, okToWork);
while(true){
okToTick.acquire(3);
System.out.printf("\clock : %s\n", i++);
okToWork.release(3);
}
和子线程的 run() :
semaphores here, passed by cnstr()
ID = //passed in by cnstr()
isBusy = false;
----------------------------------
try{
while(true){
okToWork.acquire();
if(!isBusy){
System.out.println("inside sub " + ID);
isBusy = true;
}
okToTick.release();
}
}
catch(Exception e){}
我想要这个结果:
clock : 0
inside sub 1
inside sub 0
inside sub 2
clock : 1
clock : 2
...
但有时我会得到这个:
clock : 0
inside sub 1
clock : 1
inside sub 0
inside sub 2
clock : 2
...