Hallo,
könnte mir jemand sagen, ob es im folgenden Code zu Deadlocks kommen kann und wenn ja erklären wie diese zustandekommt?
könnte mir jemand sagen, ob es im folgenden Code zu Deadlocks kommen kann und wenn ja erklären wie diese zustandekommt?
Java:
public class SynchronisationsTest{
public static void main(String [ ] args){
Semaphore [ ] ressourcen = new Semaphore(3);
resourcen [0] = new Semaphore(1);
ressourcen [1] = new Semaphore(1);
ressourcen [2] = new Semaphore(1);
ReentrantLock lock = new ReentrantLock();
RessourcenThread [] threads = new RessourcenThread();
threads [0] = new RessourcenThread(ressourcen[0], ressourcen[1], lock);
threads [1] = new RessourcenThread(ressourcen[1], ressourcen[2], lock);
threads [2] = new RessourcenThread(ressourcen[2], ressourcen[0], lock);
for (RessourcenThread thread : threads){
thread.start();
}
...
}
}
public class RessourcenThread extends Thread{
private Semaphore ressource1; // binärer Semaphore
private Semaphore ressource2; // binärer Semaphore
private ReentrantLock lock;
public RessourcenThread (Semaphore ressource1, Semaphore ressource2, ReentrantLock lock){
this.ressource1 = ressource1;
this.ressource2 = ressource2;
this.lock = lock;
}
public void run{
try{
lock.lock();
ressource1.acquire();
ressource2.acquire();
lock.unlock();
// mache irgendetwas kritisches mit den Ressourcen
...
lock.lock();
ressource1.release();
ressource2.release();
lock.unlock();
}
catch(InterruptedException e) {}
}
}
Zuletzt bearbeitet von einem Moderator: