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")
}

  

最新文章

  1. Smart3D系列教程3之 《论照片三维重建中Smart3D几个工作模块的功能意义》
  2. 窥探Swift之使用Web浏览器编译Swift代码以及Swift中的泛型
  3. Push:iOS基于APNS的消息推送
  4. sshd_conf AllowUsers参数
  5. javascript错误处理与调试(转)
  6. [ACM_暴力] ZOJ 3710 [Friends 共同认识 最终认识 暴力]
  7. ZOJ3791 An Easy Game(DP)
  8. html5定位并在百度地图上显示
  9. get started with laravel
  10. 数据类型的转换String
  11. HDU1372:Knight Moves(经典BFS题)
  12. 洛谷 P1830 轰炸Ⅲ
  13. linux杂记(十)what is BASH Shell
  14. Mac 安装 Grunt
  15. delphi 程序输出文件夹存放位置
  16. Direct3D 11 Tutorial 6:Lighting_Direct3D 11 教程6:灯光
  17. zabbix-Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused
  18. source from Other`s
  19. 使用json-lib-*.jar的JSON解析工具类
  20. join语句中on条件与where条件的区别

热门文章

  1. .NET RulesEngine(规则引擎)
  2. Python学习笔记-PuLP库(3)线性规划实例
  3. Powershell免杀
  4. G - Number Transformation(BFS+素数)
  5. Git使用指导
  6. SpringCloud-微服务架构编码构建
  7. 用laravel Maatwebsite\Excel 教你导出漂亮的Excel表单
  8. Thinkphp树形菜单相关方法
  9. 从苏宁电器到卡巴斯基第10篇:我在苏宁电器当营业员 II
  10. UVA10905孩子们的游戏