Sobes.tech
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.concurrent paketist, 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.