当前位置:
首页 >
Go的sync.RWMutex(六)
发布时间:2024/9/19
54
豆豆
生活随笔
收集整理的这篇文章主要介绍了
Go的sync.RWMutex(六)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
RWMutex
RWMutex有两种锁写锁和读锁,用法也有不同,首先读锁可以同时加多个,但是写锁就不行 只能1个
给资源可以加多个读锁或者一个写锁,其经常用于读次数远远多于写次数的场景.
原则
读锁的时候别的协程也可以读,但是不可以写
写锁的时候其他协程都不可以操作,不可以读也不可以写
操作
- RLock() //读锁定
- RUnlock() //读解锁
- Lock() //写锁定
- Unlock() //写解锁
实例
package mainimport ("sync""time" )var m *sync.RWMutexfunc main() {m = new(sync.RWMutex)go write(1)go read(2)go write(3)time.Sleep(7 * time.Second) }// RWMUX是控制协程对于资源的改变顺序的 // RLOCK RULOCK // LOCK ULOCK // 在一个协程里面 // 对资源的 // 读锁的时候别的也可以读,但是不可以写 // 写锁的时候都不可以操作,不可以读也不可以写func read(i int) {println(i, "read start")m.RLock()println(i, "reading")time.Sleep(1 * time.Second)m.RUnlock()println(i, "read over") }func write(i int) {time.Sleep(1 * time.Second)println(i, "write start")m.Lock()println(i, "writing")time.Sleep(2*time.Second)m.Unlock()println(i, "write over") }// 2 read start // 2 reading // 3 write start // 1 write start // 2 read over // 3 writing // 3 write over // 1 writing // 1 write over总结
以上是生活随笔为你收集整理的Go的sync.RWMutex(六)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: JQUERY获取DOM
- 下一篇: Go的sync.Mutex(七):互斥锁