go runtime_error ai_generated true

WARNING: DATA RACE (goroutine write)

ID: go/goroutine-race-condition-write

Also available as: JSON · Markdown · 中文
80%Fix Rate
88%Confidence
0Evidence
2024-09-10First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
1.21 active
1.22 active

Root Cause

Multiple goroutines access the same variable concurrently, with at least one write, without synchronization.

generic

中文

多个协程并发访问同一变量,且至少有一个写操作,没有同步机制。

Workarounds

  1. 98% success Use sync.Mutex to protect shared variable
    var mu sync.Mutex
    var counter int
    for i := 0; i < 10; i++ {
        go func() {
            mu.Lock()
            counter++
            mu.Unlock()
        }()
    }
  2. 95% success Use atomic operations for simple types
    var counter int64
    for i := 0; i < 10; i++ {
        go func() {
            atomic.AddInt64(&counter, 1)
        }()
    }

Dead Ends

Common approaches that don't work:

  1. Ignoring the race warning 95% fail

    Data races lead to undefined behavior, crashes, or corrupted data.

  2. Using time.Sleep to synchronize 90% fail

    Sleep does not guarantee ordering or atomicity; races persist.