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

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.

主站蜘蛛池模板: 凤城市| 新巴尔虎右旗| 孟津县| 云梦县| 嘉鱼县| 越西县| 陆河县| 南阳市| 日照市| 昂仁县| 隆昌县| 滕州市| 大连市| 洛南县| 高密市| 台南县| 华容县| 囊谦县| 永泰县| 孙吴县| 临沧市| 龙游县| 广东省| 博罗县| 闻喜县| 长泰县| 林周县| 青河县| 喀喇沁旗| 准格尔旗| 宁海县| 乐业县| 昆明市| 类乌齐县| 康马县| 古蔺县| 宾川县| 阿城市| 咸丰县| 措勤县| 修文县|