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()-ро дар як вақт иҷро мекунад, ки ин боис мешавад, ки тағйиротҳои нодуруст дар маълумоти умумӣ пешгирӣ шаванд.