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
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>