Sobes.tech
Middle

Există o problemă de siguranță a firelor: dacă două goroutines apelează Lock cu un ciclu în același timp, se pot amesteca între ele. Cum se poate remedia acest lucru?

sobes.tech AI

Răspuns de la AI

Проблема возникает из-за того, что две горутины одновременно заходят в критическую секцию, и их циклы перемешиваются, нарушая потокобезопасность.

Чтобы исправить это, нужно использовать мьютекс (sync.Mutex) для синхронизации доступа. Мьютекс гарантирует, что только одна горутина может выполнять код внутри Lock в один момент времени.

Пример:

var mu sync.Mutex

func criticalSection() {
    mu.Lock()
    defer mu.Unlock()
    for i := 0; i < 10; i++ {
        // критическая работа
        fmt.Println(i)
    }
}

Таким образом, если две горутины вызовут criticalSection, одна будет ждать, пока другая не завершит выполнение цикла, что предотвратит перемешивание.