这篇文章主要讲解了“Go RWMutex并发怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go RWMutex并发怎么使用”吧!
RWMutex表示读写锁:
1.它允许任意读操作同时进行,主要用于读多写少的场景。即修改数据时候需要加锁读取不需要加锁。
2.读写锁控制下的多个写操作之间都是互斥的,当一个goroutine获取写锁的之后,其他的goroutine获取读写锁都会等待
3 当一个goroutine获取读锁之后,其他的goroutine获取写锁都会等待,但其他goroutine获取读锁时,都会继续获取锁
综上:1同时只能有一个 goroutine 能够获得写锁定;2同时可以有任意多个 goroutine 获得读锁定;3同时只能存在写锁定或读锁定(读和写互斥)。
写操作的锁定和解锁
// Lock 将 rw 设置为写锁定状态,禁止其他例程读取或写入。func (rw *RWMutex) Lock()// Unlock 解除 rw 的写锁定状态,如果 rw 未被写锁定,则该操作会引发 panic。func (rw *RWMutex) Unlock()
读操作的锁定和解锁
// RLock 将 rw 设置为读锁定状态,禁止其他例程写入,但可以读取。func (rw *RWMutex) RLock()// Runlock 解除 rw 的读锁定状态,如果 rw 未被读锁定,则该操作会引发 panic。func (rw *RWMutex) RUnlock()
注意:
写解锁在进行的时候会试图唤醒所有因欲进行读锁定而被阻塞的Goroutine.
读解锁在进行的时候只会在已无任何读锁定的情况下试图唤醒一个因欲进行写锁定而被阻塞的Goroutine
若对一个未被写锁定的读写锁进行写解锁,会引起一个运行时的恐慌
而对一个未被读锁定的读写锁进行读解锁却不会如此`
在读多写少的场景,读写锁的性能高于互斥锁
感谢各位的阅读,以上就是“Go RWMutex并发怎么使用”的内容了,经过本文的学习后,相信大家对Go RWMutex并发怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。