Sobes.tech
Junior — Middle

Előfordultak olyan esetek, amikor kölcsönös folyamatblokkolásokkal szembesült rendszerekben?

sobes.tech MI

Válasz az MI-től

Igen, az egymásra utaló zárolás (deadlock) olyan helyzet, amikor két vagy több folyamat vagy szál örökké várja egymástól a források felszabadítását.

Java-ban ez akkor fordulhat elő, ha helytelenül használjuk a szinkronizációt, például amikor két szál két monitor objektumot próbál meg különböző sorrendben megszerezni.

Példa:

Object lock1 = new Object();
Object lock2 = new Object();

Thread t1 = new Thread(() -> {
    synchronized(lock1) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock2) {
            // munka
        }
    }
});

Thread t2 = new Thread(() -> {
    synchronized(lock2) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock1) {
            // munka
        }
    }
});

t1.start();
t2.start();

A deadlock elkerülése érdekében fontos betartani a zárolások megszerzésének sorrendjét, és minimalizálni a források tartási idejét.