go语言--竞争、原子函数、互斥锁
2020-12-13 15:15
标签:其他 tom img 增加 int 代码 syn port one 下面代码例子是展示并发下公共数据操作,通过原子函数和互斥锁怎么解决。 go语言--竞争、原子函数、互斥锁 标签:其他 tom img 增加 int 代码 syn port one 原文地址:https://www.cnblogs.com/wudiffs/p/11576683.html一、go语言竞争状态、原子函数、互斥锁
package main
import (
"sync"
"runtime"
"fmt"
"sync/atomic"
)
var(
// counter是所有goroutine都要增加的变量
counter int64
// wg用来等待程序的结束
wg sync.WaitGroup
// mutex 用来定义一段代码临界区
mutex sync.Mutex
)
func main() {
// 计数加2,表示要等待两个goroutine
wg.Add(2)
// 创建两个goroutine
go incCounter(1)
go incCounter(2)
// 等待goroutine结束
wg.Wait()
fmt.Println("Final Counter:", counter)
}
// incCounter增加包里counter变量的值
func incCounter(id int) {
// 延时调用,在函数退出时调用Done来通知main函数工作已经完成
defer wg.Done()
for count := 0; count