このコードでデッドロックが発生する可能性はありますか?デッドロック - このプログラムのデッドロックは可能ですか?
私はそれを何回も実行したが、1つも持っていなかったが、デッドロック状況が可能かどうかの説明を求める。
public class DeadlockTest {
public static void main(String[] args) {
ReentrantLock[] locks = new ReentrantLock[3];
for (int i = 0; i < 3; i++) {
locks[i] = new ReentrantLock();
}
WorkerThread[] threads = new WorkerThread[3];
for (int i = 0; i < 3; i++) {
threads[i] = new WorkerThread(locks[i], locks[(i+1)%3]);
threads[i].start();
}
}
}
class WorkerThread extends Thread {
private ReentrantLock l1;
private ReentrantLock l2;
public WorkerThread(ReentrantLock l1, ReentrantLock l2) {
this.l1 = l1;
this.l2 = l2;
}
public void run() {
l1.lock();
l2.lock();
System.out.println("Working now.");
l1.unlock();
l2.unlock();
}
}
これは、よく知られているダイニング哲学者の単純化された変形です。以前は3つではなく5つでしたが、この場合は違いはありません。あなたは '食事の哲学者 'のためにウェブを検索したいかもしれません。読むには面白いものがたくさんあります。 –
[4つのよく知られたデッドロックの条件](http://users.cs.cf.ac.uk/OFRana/os/lectureos12/node2.html)があります。これらの条件のうちどれを適用すると思いますか)このコードのために? –
私はこれが学校の割り当ての質問だった感じを得る – Gikkman