Sobes.tech
Junior — Middle

Kā pārbaudīt, vai, izmantojot map ar mutex, ir veikta datu bloķēšana?

sobes.tech AI

Atbilde no AI

Go valodā, ja izmantojat mutex, lai aizsargātu piekļuvi kartei, tieši pārbaudīt, vai ir notikusi bloķēšana, nav iespējams, jo standarta sync.Mutex nepiedāvā metodes tās stāvokļa pārbaudīšanai.

Tomēr, jūs varat:

  • Izmantot sync.RWMutex un rūpīgi plānot kodu, lai bloķēšanas būtu skaidras.
  • Testos vai atkļūdošanā pievienot žurnālus pirms un pēc Lock() un Unlock() izsaukumiem.
  • Lai iegūtu progresīvāku kontroli, izmantot sync.Mutex no sync pakotnes ar ietvariem, kas reģistrē bloķēšanas stāvokli (piemēram, boolean karogu), taču tas prasa piesardzību.

Piemērs ar žurnālu:

var mu sync.Mutex
var m = make(map[string]int)

func write(key string, value int) {
    fmt.Println("Bloķē mutex")
    mu.Lock()
    defer mu.Unlock()
    fmt.Println("Mutex ir bloķēts")
    m[key] = value
    fmt.Println("Atbloķē mutex")
}

Šādā veidā netieši var pārliecināties, ka notiek bloķēšana, bet iebūvēti līdzekļi mutex stāvokļa pārbaudei nav pieejami.