官术网_书友最值得收藏!

The read-write mutex

Go also supports a read-write lock. A read-write lock differentiates between read and write operations. So, whenever you only perform concurrent read operations, the goroutines won't block. However, whenever you perform a write operation, all other reads and writes get blocked until the write lock is released. As always, this is best explained with an example, such as the following code:

var myRWMutex = &sync.RWMutex{}

A read-write lock in Go is represented by a pointer to a Go struct of the sync.RWMutex type, which is what we initialized in the preceding code snippet.

To perform a read operation, we make use of the RLock() and RUnlock() methods of the Go struct:

myRWMutex.RLock()
fmt.Println(myMap[1])
myRWMutex.RUnlock()

To perform a write operation, we make use of the Lock() and Unlock() methods:

myRWMutex.Lock()
myMap[2] = 200
myRWMutex.Unlock()

The *sync.RWMutex type can be found all over the place in Go's standard package.

主站蜘蛛池模板: 湖北省| 南投县| 灌南县| 武穴市| 丹东市| 苗栗市| 海安县| 渝北区| 牙克石市| 韶关市| 南涧| 上虞市| 隆德县| 芮城县| 岚皋县| 呼和浩特市| 都兰县| 涪陵区| 合山市| 玉溪市| 娄底市| 内江市| 屯昌县| 宜川县| 沅陵县| 龙井市| 德化县| 上虞市| 固安县| 尼木县| 建湖县| 临夏县| 韶关市| 凤阳县| 绥化市| 屏东市| 清涧县| 云安县| 阳高县| 秦安县| 邵东县|