欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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(六)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。