Sobes.tech
Junior — Middle

Чӣ гуна механизмии мутақобилан истисно бо истифода аз Mutex дар забони Go амалӣ мешавад?

sobes.tech AI

Ҷавоб аз AI

Дар забони Go, барои амалӣ кардани муқовимати мутақобил (mutex) навъ sync.Mutex истифода мешавад. Ин имкон медиҳад, ки қисмҳои критикии коди барнома аз дастрасии ҳамзамон аз ҷониби чанд goroutine муҳофизат карда шаванд ва ҳолатҳои рақобат пешгирӣ шаванд.

Оператсияҳои асосӣ:

  • Lock() — mutex-ро мӯҳр мезанад, дигар goroutine-ҳоро аз дастрасӣ бозмедорад.
  • Unlock() — mutex-ро кушода, имкон медиҳад, ки дигар goroutine-ҳо идома диҳанд.

Маслиҳат барои истифода:

package main

import (
    "fmt"
    "sync"
)

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

    mu.Lock() // Мӯҳргузории mutex
    counter++
    fmt.Println("Ҳисобгуч:", counter)
    mu.Unlock() // Кушодани mutex
}

Дар муҳити бисёрсоҳавӣ, mutex кафолат медиҳад, ки танҳо як goroutine коди байни Lock() ва Unlock()-ро дар як вақт иҷро мекунад, ки ин боис мешавад, ки тағйиротҳои нодуруст дар маълумоти умумӣ пешгирӣ шаванд.