У меня проблемы с завершением домашней работы, так что после нескольких часов попыток и поиска в Google и всего, что у меня нет другого выбора, кроме как обратиться сюда за помощью.У меня есть этот кусок кода (это не вся программа, есть также некоторые классы и пакеты, которые графически имитируют, как этот код работает, но я думаю, что размещать его здесь не обязательно):
public class KidsAndTramboline {
private Tramboline tramboline = new Tramboline(300, 5);
private class Tramboline {
private Semaphore[] mutexes;
private int[] counters;
private Semaphore free;
private Semaphore weight;
private Semaphore kids;
public Tramboline(int maxWeight, int maxKids) {
mutexes = new Semaphore[] {
new Semaphore(1),
new Semaphore(1)
};
counters = new int[] {
0,
0
};
free = new Semaphore(1);
weight = new Semaphore(maxWeight);
kids = new Semaphore(maxKids);
}
public void getOn(Kid kid) {
int sex = kid.sex == Sex.MALE ? 1 : 0;
mutexes[sex].acquireUninterruptibly();
counters[sex]++;
if (counters[sex] == 1) {
free.acquireUninterruptibly();
}
mutexes[sex].release();
weight.acquireUninterruptibly(kid.weight);
kids.acquireUninterruptibly(1);
}
public void getOff(Kid kid) {
int sex = kid.sex == Sex.MALE ? 1 : 0;
mutexes[sex].acquireUninterruptibly();
counters[sex]--;
if (counters[sex] == 0) {
free.release();
}
mutexes[sex].release();
weight.release(kid.weight);
kids.release(1);;
}
}
private class Kid extends UtilThread {
private final Sex sex = getSex();
private final int weight = getWeight();
@Override
protected void step() {
resting();
tramboline.getOn(this);
try {
jumping();
} finally {
tramboline.getOff(this);
}
}
}
private enum Sex {
MALE, FEMALE;
}
}
Это какая-то проблема с читателями и писателями, только с детьми и с батутом.Дело в том, что когда мальчики прыгают, девочкам приходится ждать и наоборот.Что я должен сделать здесь, так это когда мальчики и девочки ждут вместе (трамблин пуст), девочкам следует отдавать приоритет, чтобы они ладили раньше, чем мальчики.Можете ли вы помочь мне решить эту проблему?Спасибо.