Sobes.tech
Junior — Middle

Kā novērst divu pavedienu savstarpēju bloķēšanu daudzvadu programmā?

sobes.tech AI

Atbilde no AI

Savstarpēja bloķēšana (deadlock) rodas, kad divi vai vairāk pavedieni mūžīgi gaida viens otra resursu atbrīvošanu. Lai novērstu deadlock, var izmantot šādus pieejas veidus:

  • Izvairīties no iekļautām bloķēm: samazināt vienlaicīgi iegūstamo resursu skaitu.
  • Resursu iegūšanas secību noteikt: vienmēr iegūt resursus tajā pašā secībā visos pavedienos.
  • Izmantot laika limitus (timeouts): mēģinot iegūt bloķi, izmantot timeout, lai izvairītos no bezgalīgas gaidīšanas.
  • Izmantot augstākā līmeņa sinhronizācijas primitīvus: piemēram, no java.util.concurrent pakotnes Android, kas samazina deadlock iespējamību.

Piemērs, kā pareizi iegūt resursus:

synchronized (resourceA) {
    synchronized (resourceB) {
        // darbs ar resursiem
    }
}

Ja visi pavedieni ievēro pirmo resourceA, tad resourceB secību, deadlock nenotiks.