[Go] golang互斥锁mutex
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()
}
}
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网
浙公网安备 33010602011771号