Go 中的性能:Mutex 与 RWMutex

问题描述 投票:0回答:1

Go 中有两种类型的互斥锁:

Mutex
RWMutex

  • Mutex
    提供
    func Lock()
    func Unlock()

  • RWMutex
    提供这些功能以及
    func RLock()
    func RUnlock()

据我了解,我们应该只在读操作多而写操作少的情况下使用

RWMutex
,以允许并发读取。写锁也比较耗时。

但是,如果我只使用

RWMutex
并在我想允许并发读取时交替使用
func Lock() / func Unlock()
和当我想像普通
func RLock
一样时使用
func RUnlock
/
Mutex
呢?
RLock
/
RUnlock
是否与普通互斥等效函数同时使用?

TLDR:当

Mutex
提供相同功能和更多选项时,为什么要使用
RWMutex

go concurrency mutex
1个回答
0
投票

A

RWMutex
需要关心很多问题,例如作家饥饿
Mutex
更简单,事实上 用作 RWMutex
 的构建块

所以原则上你可以只使用

RWMutex
作为互斥体,但随后你将使用底层
Mutex
以及附加的(在这种情况下是不必要的)顶部逻辑。由于并发性足够复杂,因此您通常会努力使一切尽可能简单和高性能,因此使用适合您需求的最简单的构造。

© www.soinside.com 2019 - 2024. All rights reserved.