Solved Task Philosopher
This commit is contained in:
parent
e0669b7382
commit
b5fc96ef94
|
@ -16,7 +16,7 @@ class ForkManager {
|
|||
// maximum concurrent threads acquiring forks - used for internal statistics
|
||||
private static final LockFreeMax concurrentAcquires = new LockFreeMax();
|
||||
|
||||
private final Lock mutex; // shared mutex for all forks
|
||||
//private final Lock mutex; // shared mutex for all forks
|
||||
private final int delayTime; // delay in milliseconds between acquiring / releasing the forks
|
||||
private final int numForks; // amount of forks to be managed
|
||||
private final Fork[] forks; // array of managed forks
|
||||
|
@ -27,12 +27,12 @@ class ForkManager {
|
|||
* @param delayTime delay in milliseconds between acquiring / releasing the forks
|
||||
*/
|
||||
public ForkManager(int numForks, int delayTime) {
|
||||
this.mutex = new ReentrantLock();
|
||||
//this.mutex = new ReentrantLock();
|
||||
this.delayTime = delayTime;
|
||||
this.numForks = numForks;
|
||||
this.forks = new Fork[numForks];
|
||||
for (int forkId = 0; forkId < numForks; forkId++)
|
||||
forks[forkId] = new Fork(forkId, mutex);
|
||||
forks[forkId] = new Fork(forkId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,10 +42,15 @@ class ForkManager {
|
|||
* @param philosopherId id of the philosopher
|
||||
*/
|
||||
public void acquireForks(int philosopherId) throws InterruptedException {
|
||||
Fork leftFork = leftFork(philosopherId);
|
||||
Fork rightFork = rightFork(philosopherId);
|
||||
// acquire forks sequentially
|
||||
leftFork(philosopherId).acquire(philosopherId);
|
||||
while(!(leftFork.getState() == FREE && rightFork.getState() == FREE)){
|
||||
forkDelay();
|
||||
rightFork(philosopherId).acquire(philosopherId);
|
||||
}
|
||||
leftFork.acquire(philosopherId);
|
||||
forkDelay();
|
||||
rightFork.acquire(philosopherId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -136,12 +141,12 @@ class ForkManager {
|
|||
/**
|
||||
* Constructor for a fork.
|
||||
* @param id unique id of the fork
|
||||
* @param mutex shared mutex to use for wait conditions
|
||||
* //@param mutex shared mutex to use for wait conditions
|
||||
*/
|
||||
public Fork(int id, Lock mutex) {
|
||||
public Fork(int id) {
|
||||
this.id = id;
|
||||
this.ownerId = -1;
|
||||
this.mutex = mutex;
|
||||
this.mutex = new ReentrantLock();;
|
||||
this.cond = mutex.newCondition();
|
||||
}
|
||||
|
||||
|
@ -195,6 +200,10 @@ class ForkManager {
|
|||
public String toString() {
|
||||
return "Fork {" + "id=" + id + ", state=" + state + ", owner=" + ownerId + '}';
|
||||
}
|
||||
|
||||
public ForkState getState(){
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue