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.concurrentpakotnes 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.