golang中的锁
在golang中,goroutine 可以理解为其它语言中的线程,在其它语言中存在的数据竞态的问题,在golang中同样存在
本文记录一下数据竞态与各种锁的使用
race condition 竞争状态
这个词也没有听起来很高大上,其实并没有什么新鲜的东西,就是多个协程对同一个变量进行读写,造成了状态不一致,得不到正确的结果,我们来看一下代码
package main
import (
"fmt"
"sync"
)
var data int
func incr(wg *sync.WaitGroup) {
defer wg.Done()
for i := 0; i < 10000; i++ {
data = data + 1
}
}
func main() {
wg := sync.WaitGroup{}
wg.Add(2)
go incr(&wg)
go incr(&wg)
wg.Wait()
fmt.Println(data)
}
