Sobes.tech
Junior — Middle

Kaip įgyvendinamas tarpusavio išskyrimo mechanizmas naudojant Mutex Go kalboje?

sobes.tech AI

Atsakymas iš AI

Go kalboje mutex (mutual exclusion) įgyvendinimui naudojamas sync.Mutex tipas. Jis leidžia apsaugoti kritinius kodo segmentus nuo vienu metu prieigos kelių gorutinių, užkertant kelią lenktynių sąlygoms.

Pagrindinės operacijos:

  • Lock() — užrakina mutex, neleidžiant kitoms gorutinėms prieiti.
  • Unlock() — atrakina mutex, leidžiant kitoms gorutinėms tęsti.

Naudojimo pavyzdys:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var mu sync.Mutex
    counter := 0

    mu.Lock() // Užrakina mutex
    counter++
    fmt.Println("Skaitiklis:", counter)
    mu.Unlock() // Atrakina mutex
}

Daugiagijų aplinkoje mutex garantuoja, kad tik viena gorutina vienu metu vykdys kodą tarp Lock() ir Unlock(), taip išvengiant neteisingų bendro naudojimo duomenų pakeitimų.