Go并发编程中sync.Mutex失效了:为什么我的并发计数结果不准确?

go并发编程:sync.mutex失效及解决方案

本文分析一个Go并发编程案例,演示了sync.Mutex失效导致并发计数结果不准确的原因,并提供两种解决方案。 案例目标是使用1000个协程对一个变量进行累加,预期结果为1000,但实际结果却往往是随机值。

Go并发编程中sync.Mutex失效了:为什么我的并发计数结果不准确?

问题代码:

原代码错误地将sync.Mutex的声明放在for循环内部,导致每个协程都创建了一个独立的锁,无法保证对共享变量的原子操作。

package mainimport (    "fmt"    "sync"    "time")func haslockandwait() {    var a = 0    var wg sync.WaitGroup    for i := 0; i < 1000; i++ {        wg.Add(1)        go func(i int) {            defer wg.Done()            var locker sync.Mutex // 错误:每个协程都有独立的锁            locker.Lock()            a++            locker.Unlock()        }(i)    }    wg.Wait()    fmt.Println("最终结果:", a)}

登录后复制

本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。

如若转载请注明出处:http://www.down96.com/tutorials/3837.html

热心网友热心网友
上一篇 2025-04-11 14:49
下一篇 2025-04-11 14:49

相关推荐

本站[软件指南]所有内容来自互联网投稿或AI智能生成,并不代表软件指南的立场。