Go 初体验 - 并发与锁.1 - sync.Mutex 与 sync.RWMutex

时间:2022-11-22 09:01:02

==== Mutex为互斥锁,顾名思义,被Mutex锁住的代码同时只允许一个协程访问,其它协程进来就要排队

如何使用?看代码:

Go 初体验 - 并发与锁.1 - sync.Mutex 与 sync.RWMutex

输出:

Go 初体验 - 并发与锁.1 - sync.Mutex 与 sync.RWMutex

释义:

并发1000个协程同时更改m的元素,这样会有一部分更改成功,但是还有一部分会出现竟态,造成并发错误,输出结果很明了

如何避免:

放开26行,30行便可

作用是锁住临界区28行,这样就能保证28行同时只有一个协程访问,其他协程进来得排队,等待上一个协程释放资源,即解锁。

==== RWMutex为读写锁

允许多个读者访问共享资源,但是只能有一个写者。不能同时既有读者又有写者。读者的个数和cpu核心数相关,用户与Mutex相同