go语言之并发安全和锁
前言
有时候在go语言中存在多个goroutine去竞争同一个资源(临界区)。这种情况会发生竞态问题(数据竞态)。
比如:飞机上火车上、人就好比goroutine,去争夺同一个厕所资源,最好的情况就是一个一个来,但是着急的时候两个人一起上就发生数据竞态。
代码:
package main
import (
"fmt"
"sync"
)
var x int64
var wg sync.WaitGroup
func add() {
defer wg.Done()
for i := 0; i < 100000; i++ {
x++
}
}
func main() {
wg.Add(2)
go add()
go add()
wg.Wait()
fmt.Println(x)
}
结果:
上面的代码是开启了两个goroutine去累加x的值,他两同时去修改和访问x会导致数据竞争,导致结果与预期不符合。
此时我们想到使用互斥锁来解决此问题,保证数据共享的同时又不会竞争资源。
互斥锁
互斥锁是一种常用的控制共
go语言之并发安全和锁最先出现在Python成神之路。
版权声明:
作者:zhangchen
链接:https://www.techfm.club/p/21510.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论