[Golang]同步工具-sync包的RWMutex-心智图总结

1. RWMutex,读写锁,又称读/写互斥锁。
读写锁是把对共享资源的"读操作"和"写操作"分别对待。
相比於互斥锁,读写锁可以实现更细致的访问控制。

2. sync.RWMutex的类型和方法。
一个读写锁中包含两个锁,读锁和写锁。
sync.RWMutex类型中的Lock方法和Unlock方法,分别用於对写锁进行锁定和解锁。
而sync.RWMutex类型的RLock方法和RUnlock方法,分别用於对读锁进行锁定和解锁。

3. 使用读/写互斥锁的规则
a. 在写锁已被锁定的情况下,再试图锁定写锁,会阻塞当前的goroutine。
b. 在写锁已被锁定的情况下,试图锁定读锁,也会阻塞当前的goroutine。
c. 在读锁已被锁定的情况下,试图锁定写锁,会阻塞当前的goroutine。
d. 在读锁已被锁定的情况下,再试图锁定读锁,并不会阻塞当前的goroutine。

对於某个受到读写锁保护的共享资源,多个写操作不能同时进行,
写操作和读操作,也不能同时进行,但多个读操作却可以同时进行。

解锁"读写锁中未被锁定的写锁",会立即引发panic。对於读锁也是如此。
并且此种panic是不可恢复的。

https://ithelp.ithome.com.tw/upload/images/20201118/20131728RieOhOOyCG.png

https://ithelp.ithome.com.tw/upload/images/20201118/20131728CHQSqlxiOd.png
参考来源:
郝林-Go语言核心36讲
https://github.com/hyper0x/Golang_Puzzlers
https://golang.org/pkg/cmd/go/internal/test/


<<:  【网路概论】L6-1 网路层协议

>>:  JS this:call, apply, bind 与 严谨模式 DAY65

Day 30. 要别人看不懂,还是让自己看不懂的 - 混淆 Obfuscation

App 混淆再资安保护领域来说,可谓是最复杂的一环,也是最重要的一环 但是资安检测无法有个标准的检...

Day 23. slate × Operation × L-transform

上一篇文章我们深入了解了 Operation 的 transform function 是如何实作...

虾皮 Open Platform 与经典程序流程图

不管是在哪开始学习写程序,都一定会看到最经典的流程图: 至今,流程图的正确画法也不是那麽容易被在乎,...

从零开始学3D游戏设计:环境後制效果

这是 Roblox 从零开始系列,游戏环境章节的第一个单元,你将学会如何去针对场景进行後制 【You...

Day4- 整数与变数 和 型态转换

数字延伸如何使用将变数指定值进行运算,并将不同型态转成字串与浮点数。 整数与变数 结合算数运算子与赋...