Sobes.tech
Junior — Middle

Как се реализира механизма за взаимно изключване с помощта на Mutex в езика Go?

sobes.tech AI

Отговор от AI

В езика Go за реализиране на взаимно изключване (mutex) се използва типът sync.Mutex. Той позволява да се защити критичната секция на кода от едновременен достъп от няколко горутини, предотвратявайки състезателни условия.

Основни операции:

  • Lock() — заключва mutex-а, блокирайки други горутини.
  • Unlock() — отключва mutex-а, позволявайки на други горутини да продължат.

Пример за използване:

package main

import (
    "fmt"
    "sync"
)

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

    mu.Lock() // Заключва mutex-а
    counter++
    fmt.Println("Брояч:", counter)
    mu.Unlock() // Отключва mutex-а
}

В многопоточна среда mutex гарантира, че само една горутина изпълнява кода между Lock() и Unlock() едновременно, което предотвратява неправилни промени в споделените данни.