Go语言协程并发---读写锁sync.RWMutex
2024-09-05 22:49:23
package main import (
"fmt"
"sync"
"time"
) /*
读写锁
多路只读
一路只写
读写互斥
*/ /*读写锁API介绍*/
func main101() {
var rwm sync.RWMutex //锁定为写模式---一路只写
rwm.Lock()
//解锁写模式
rwm.Unlock() //锁定为读模式---多路只读
rwm.RLock()
//释放读写锁
rwm.RUnlock()
} /*
数据库一写多度
·Read方法设定为多路只读
·Write方法设定为单路只写
·创建5读5写10条协程,观察读写锁效果
*/
func main() {
var wg sync.WaitGroup //声明读写锁
var rwm sync.RWMutex for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
//锁定为只读模式,运行多个协程同时抢到读锁
rwm.RLock()
fmt.Println("读取数据库")
<-time.After(3*time.Second) //解读锁
rwm.RUnlock()
wg.Done()
}() wg.Add(1)
go func() {
//锁定为写模式,只运行一个协程抢到写锁
rwm.Lock()
fmt.Println("写入数据库")
<-time.After(3*time.Second) //解锁
rwm.Unlock()
wg.Done()
}()
} wg.Wait()
fmt.Println("main over")
}
最新文章
- Smart3D系列教程3之 《论照片三维重建中Smart3D几个工作模块的功能意义》
- 窥探Swift之使用Web浏览器编译Swift代码以及Swift中的泛型
- Push:iOS基于APNS的消息推送
- sshd_conf AllowUsers参数
- javascript错误处理与调试(转)
- [ACM_暴力] ZOJ 3710 [Friends 共同认识 最终认识 暴力]
- ZOJ3791 An Easy Game(DP)
- html5定位并在百度地图上显示
- get started with laravel
- 数据类型的转换String
- HDU1372:Knight Moves(经典BFS题)
- 洛谷 P1830 轰炸Ⅲ
- linux杂记(十)what is BASH Shell
- Mac 安装 Grunt
- delphi 程序输出文件夹存放位置
- Direct3D 11 Tutorial 6:Lighting_Direct3D 11 教程6:灯光
- zabbix-Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused
- source from Other`s
- 使用json-lib-*.jar的JSON解析工具类
- join语句中on条件与where条件的区别