golang sync包的读写锁RWMutex的使用
来源:互联网 发布:网络水军怎么找 编辑:程序博客网 时间:2024/05/21 04:38
sync包的读写锁RWMutex的使用(sync.RWMutex)
我们使用“读写”锁的场景主要是在多线程的安全操作下,并且读的情况多于写的情况,也就是说既满足多线程操作的安全性,也要确保性能不能太差,这时候,我们可以考虑使用读写锁。当然你也可以简单暴力直接使用互斥锁(Mutex)。
RWMutex的使用主要事项
- 1、读锁的时候无需等待读锁的结束
- 2、读锁的时候要等待写锁的结束
- 3、写锁的时候要等待读锁的结束
- 4、写锁的时候要等待写锁的结束
RWMutex的四种操作方法
RLock() //读锁定
RUnlock() //读解锁
Lock() //写锁定
Unlock() //写解锁
废话少说直接上代码:
package mainimport ( "sync" "time")var m *sync.RWMutexfunc main() { m = new(sync.RWMutex) go write(1) go read(21) go write(3) go read(22) go write(4) go read(23) go write(5) go read(24) go write(6) go read(25) go write(7) time.Sleep(20 * time.Second)}func read(i int) { println(i, "read start") m.RLock() var p = 0 var pr = "read" for { pr += "." if p == 10 { break } time.Sleep(350 * time.Millisecond) p++ println(i, pr) } m.RUnlock() println(i, "read end")}func write(i int) { println(i, "write start") m.Lock() var p = 0 var pr = "write" for { pr += "." if p == 10 { break } time.Sleep(350 * time.Millisecond) p++ println(i, pr) } m.Unlock() println(i, "write end")}
执行结果:
什么也不说了,如想更加深刻理解,请复制上面代码自己运行看看。
阅读全文
0 0
- golang sync包的读写锁RWMutex的使用
- golang读写锁RWMutex
- golang中读写锁RWMutex和通用锁Mutex的使用
- golang RWMutex读写锁分析
- golang中sync.RWMutex和sync.Mutex
- GOLANG sync.Mutex和sync.RWMutex
- golang中sync.RWMutex和sync.Mutex区别
- golang Context包的使用
- golang包学习之sync
- golang同步之sync包
- golang的临时对象池sync.Pool
- golang中os/signal包的使用
- golang 工程中包的使用
- concurrent包读写锁ReentrantReadWriteLock的使用
- browser-sync的使用
- browser-sync的使用
- sync 的使用
- 【golang】golang redis 的使用
- Android客户端向PHP服务器端上传头像教学视频
- iOS仿探探六宫格相册的实现,带添加和删除功能
- 系统架构师考试总结
- 辛巴巴运动网第一课
- 深搜和广搜--原理彼此的优缺点
- golang sync包的读写锁RWMutex的使用
- java 反射 访问构造方法
- Maven学习总结(一)——Maven入门
- java并发-线程安全与共享资源(4)
- swift 接入 swjsdk
- TC SRM568,奇妙的题目
- xamarin学习笔记A19(安卓AIDL)
- 使用python爬虫(一)
- Spring配置文件<context:property-placeholder>标签使用漫谈