在操场上,有两排孩子在等待使用环形交叉路口——一个从北面向它,一个从南面向它。儿童只能从任一队列的前面进入环形交叉路口,并且只有在有可用空间的情况下才能进入(每次只能有一个孩子使用每个路段)。一旦进入环形交叉路口,他们会随机使用一段时间,然后随机向东或向西离开。然后他们在别处玩一段随机时间,然后随机重新进入南北队列,以此类推,无限循环。环形交叉路口顺时针旋转,排队的孩子将始终使用第一个出现的空间...... 使用 java 信号量编写一个程序,以通过一组代表孩子的进程同步对共享环形交叉路口对象的访问。
这是我到目前为止所做的,不知道下一步该做什么。我在主课上做什么?
import java.util.Random;
public class Child extends Thread {
private Random random;
private int which;
private int number;
public Child(int number) {
this.number = number;
random = new Random();
this.which = random.nextInt(2);
}
public void run() {
//start point?
}
public int getNumber() {
return number;
}
private void checkQuePosition() {
if (atFront())
tryToGetOn();
else
checkQuePosition();
}
//returns true if at front of que, else false
private boolean atFront() {
int position;
if (which == 0)
position = Playground.north.que.search(this);
else
position = Playground.south.que.search(this);
return position == 1;
}
private void tryToGetOn() {
Playground.roundabout.semaphore.acquire();
//get into the roundabout somehow
}
//releases semaphore, sleeps for a random period then calls joinQue(random 0 or 1)
public void getOff() {
Playground.roundabout.semaphore.release();
Thread.sleep(random.nextLong());
joinQue(random.nextInt(2));
}
private void joinQue(int w) {
this.which = w;
if (w == 0) {
//join north que
}
else
;//join south que
checkQuePosition();
}
}
我到了这里,现在我迷路了!请协助