hallo,
veruche mich gerade an der semaphore implementierung eines federballspiel zwischen 4 personen...
1) person x schlägt den ball person x+1
2) ist der ball bei der letzten person angekommen, spielt diese den ball, über alle anderen personen zurück, zu person 1.
Ausgabe des Programm:
1 -> 2
2 -> 3
3 -> 4
4 -> 3
und danach hängt der thread....
vielleicht sieht jemand den fehler...
gruß,
marc
veruche mich gerade an der semaphore implementierung eines federballspiel zwischen 4 personen...
1) person x schlägt den ball person x+1
2) ist der ball bei der letzten person angekommen, spielt diese den ball, über alle anderen personen zurück, zu person 1.
Code:
public class ball {
int kann_schlagen = 1;
int richtung = 1;
semaphore sem = new semaphore(1);
public void will_schlagen(int spieler) {
while (kann_schlagen != spieler) {
sem.p();
}
switch (richtung) {
case 1:
switch (kann_schlagen) {
case 1:
kann_schlagen = 2;
System.out.println("1 -> 2");
break;
case 2:
kann_schlagen = 3;
System.out.println("2 -> 3");
break;
case 3:
kann_schlagen = 4;
System.out.println("3 -> 4");
break;
case 4:
kann_schlagen = 3;
System.out.println("4 -> 3");
richtung = 2;
break;
}
;
break;
case 2:
switch (kann_schlagen) {
case 2:
kann_schlagen = 1;
System.out.println("2 -> 1");
richtung = 1;
break;
case 3:
kann_schlagen = 2;
System.out.println("3 -> 2");
break;
}
;
break;
}
sem.v();
}
}
Code:
public class federballPraktikumSemaphorMain {
public static void main(String[] args) {
ball ball = new ball();
spieler p1 = new spieler(ball, 1);
spieler p2 = new spieler(ball, 2);
spieler p3 = new spieler(ball, 3);
spieler p4 = new spieler(ball, 4);
p1.start();
p2.start();
p3.start();
p4.start();
}
}
Code:
public class spieler extends Thread {
int nummer;
ball ball;
public spieler(ball ball, int nummer) {
this.ball = ball;
this.nummer = nummer;
}
public void run() {
while (true) {
ball.will_schlagen(nummer);
}
}
}
Code:
public class semaphore {
private int value;
public semaphore(int init) {
if (init < 0)
init =0;
value = init;
}
public synchronized void p(){
while (value == 0){
try {
this.wait();
}
catch (InterruptedException e){
}
}
value--;
}
public synchronized void v(){
value++;
notify();
}
}
Ausgabe des Programm:
1 -> 2
2 -> 3
3 -> 4
4 -> 3
und danach hängt der thread....
vielleicht sieht jemand den fehler...
gruß,
marc