[Go] golang互斥锁mutex
程序员文章站
2022-05-17 15:39:48
1.互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码2.Lock()和Unlock()定义临界区 ......
1.互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码
2.lock()和unlock()定义临界区
package main
import (
"fmt"
"runtime"
"sync"
)
var (
//全局变量
counter int64
//计数信号量
wg sync.waitgroup
//mutex定义一段代码临界区
mutex sync.mutex
)
func main() {
fmt.println("hello")
//计数加2,等待两个goroutine
wg.add(2)
go inccounter()
go inccounter()
//主goroutine等待子goroutine结束
wg.wait()
fmt.println("最终counter值:", counter)
}
//增加counter的值函数
func inccounter() {
//函数结束,减小信号量
defer wg.done()
for count := 0; count < 2; count++ {
//创建这个临界区
//同一时刻只允许一个goroutine进入
mutex.lock()
//使用大括号只是为了让临界区看起来更清晰,并不是必须的
{
value := counter
//强制调度器切换
runtime.gosched()
value++
counter = value
}
mutex.unlock()
}
}