Java - Lab4 Cina Filozofilor
Java - Lab4 Cina Filozofilor
Scopul lucrarii:
Însuşirea modalităţilor de sincronizare pentru algoritmul cina filosofilor;
Realizarea sincronizării firelor de execuţie pentru algoritmul cina filosofilor;
Etapele de realizare:
Sincronizarea firelor de execuţie pentru algoritmul cina filosofilor;
Listingul Programului:
package filozofi;
import java.util.concurrent.locks.*;
import java.util.logging.Level;
import java.util.logging.Logger;
this.forks = forks;
this.currentState = state.înfometat;
this.name = currentName++;
2
@Override
while (true) {
switch (currentState) {
case înfometat:
if (wasHungry == false) {
wasHungry = true;
if (forks.takeForks(name) == true) {
this.currentState = state.Maninca;
break;
case Maninca:
try {
Thread.sleep( (int)(Math.random()*1000) );
//countEating++;
forks.leaveForks(name);
this.currentState = state.mediteaza;
wasHungry = false;
break;
case mediteaza:
try {
Thread.sleep( (int)(Math.random()*2000) );
3
} catch (InterruptedException ex) {
this.currentState = state.înfometat;
wasHungry = false;
Gindeste_contor++;
if( Gindeste_contor==4) {
this.stop(); }
break; } }}}
class Forks {
this.number = number;
forks[i] = state.Liber;
printState(); }
lock.lock();
state leftState;
state rightState;
rightState = forks[position];
forks[position] = state.Ocupat;
4
System.out.println("Filosoful #"+position+" a luat bețișoarele");
printState();
success = true; }
lock.unlock();
return success; }
lock.lock();
state leftState;
state rightState;
forks[position] = state.Liber;
printState();
lock.unlock(); }
System.out.print(i+":"+forks[i]+" ");
System.out.println(); }
public Filozofi(){}
philosophers[i].start();
}}
Rezultatele obtinute: