[Go] golang互斥锁mutex
2023-02-18 15:47:27 时间
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() } }
相关文章
- 一文教会你mock(Mockito和PowerMock双剑合璧)
- Go语言性能剖析利器--pprof实战
- Linux内存泄露案例分析和内存管理分享
- 通过linux-PAM实现禁止root用户登陆的方法
- Linux策略路由详解
- 理解virt、res、shr之间的关系(linux系统篇)
- oracle学习笔记(十六) PL/SQL 异常和goto语句
- Linux云主机安全入侵排查步骤
- PHP官方框架 Zend Framework 2.1 发布
- PHP 5.4 内置Web服务器使用说明
- 一个小巧的PHP防注入类
- PHPCMS后台入口地址隐藏方法
- 在Linux中将目录压缩打包为zip文件 并通过ftp上传的Shell脚本
- 用PHP解析XML为数组的方法
- 一段经典的抽奖算法 for PHP版
- 在Linux中用Shell脚本完成SVN版本库的建立
- PHPCMS V9无法正常通过QQ登录的解决方案
- 解决Nginx环境下PHP的flush失效问题
- 用SS5在Linux上搭建Socks5 Proxy代理服务器
- Linux中编译安装Redis和PHP扩展