Junior — Middle
Sistemlerde karşılıklı süreç kilitlenmeleriyle karşılaştığınız durumlar oldu mu?
sobes.tech yapay zeka
AI'dan gelen yanıt
Evet, karşılıklı kilitlenme (deadlock), iki veya daha fazla sürecin veya iş parçacığının birbirlerinden kaynakların serbest bırakılmasını sonsuza dek beklediği durumdur.
Java'da, bu, senkronizasyonun yanlış kullanımı nedeniyle olabilir; örneğin, iki iş parçacığı farklı sırayla iki monitör nesnesini almaya çalıştığında.
Örnek:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// çalışma
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// çalışma
}
}
});
t1.start();
t2.start();
Deadlock'tan kaçınmak için, kilitlerin alınma sırasına dikkat etmek ve kaynakların tutulma süresini minimize etmek önemlidir.