Junior — Middle
Kuidas vältida kahe niidi vastastikust lukustamist mitme niidiga rakenduses?
sobes.tech AI
Vastus AI-lt
vastastikune lukustus (deadlock) tekib, kui kaks või enam lõime ootavad lõpmatuseni, kuni teised vabastavad ressursid. Deadlock'i vältimiseks saab kasutada järgmisi lähenemisviise:
- Vältida sisseehitatud lukke: minimeerida samaaegselt saadavate ressursside arvu.
- Resursside hankimise järjekorda määrata: alati hankida ressursid samas järjekorras kõigis lõimes.
- Kasutada ajapiiranguid (timeouts): proovides lukku saada, kasutada timeouti, et vältida lõputut ootamist.
- Kasutada kõrgema taseme sünkroniseerimise primitiive: näiteks Androidis
java.util.concurrentpaketist, mis vähendavad deadlock'i tõenäosust.
Näide korralikult järjekorras ressursside hankimisest:
synchronized (resourceA) {
synchronized (resourceB) {
// töö ressurssidega
}
}
Kui kõik lõimed järgivad esmalt resourceA, siis resourceB järjekorda, deadlock ei toimu.