Middle+
65
Чӣ гуна коди бо шарти рақобатро ислоҳ кардан, то ки он қарорнокӣ кор кунад?
Ширкатҳо дар куҷо пурсиданд
Ҷавоб аз AI
sobes.tech AI
Race condition возникает, когда несколько горутин (потоков) одновременно обращаются к общим данным без должной синхронизации, что приводит к непредсказуемому поведению программы.
Чтобы исправить код и сделать его детерминированным, нужно использовать механизмы синхронизации:
- Mutex (sync.Mutex) — блокирует доступ к общим данным, позволяя работать с ними только одной горутине за раз.
- Channel — для передачи данных между горутинами, что позволяет избежать совместного доступа.
- sync.WaitGroup — для ожидания завершения горутин.
Пример исправления с использованием мьютекса:
package main
import (
"fmt"
"sync"
)
func main() {
var mu sync.Mutex
counter := 0
var wg sync.WaitGroup
for i := 0; i < 100; i++ {
wg.Add(1)
go func() {
defer wg.Done()
mu.Lock()
counter++
mu.Unlock()
}()
}
wg.Wait()
fmt.Println("Counter:", counter)
}
В этом примере мьютекс гарантирует, что инкремент счетчика происходит последовательно, исключая гонки и обеспечивая детерминированный результат.