GoLang同步锁 Mutex

Posted JavaPub

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GoLang同步锁 Mutex相关的知识,希望对你有一定的参考价值。



文章目录

同步锁

golang当中提供了两种常用的锁。

一种是 ​​sync.Mutex​​​ (互斥锁) 另外一种是 ​​sync.RWMutex​​ (读写锁)

Mutex,它就是最简单最基础的同步锁,当一个goroutine持有锁的时候,其他的goroutine只能等待到锁释放之后才可以尝试持有。

RWMutex 是读写锁的意思,它支持一写多读,也就是说允许支持多个goroutine同时持有读锁,而只允许一个goroutine持有写锁。当有goroutine持有读锁的时候,会阻止写操作。当有goroutine持有写锁的时候,无论读写都会被堵塞。


案例

假设我们当前有多个goroutine,但是我们只希望持有锁的goroutine执行,我们可以这么写:

var lock sync.Mutex

for i := 0; i < 10; i++
go func()
lock.Lock()
defer lock.Unlock()
// do something
()

RWMutex区分了读写锁,所以我们一共会有4个api,分别是Lock, Unlock, RLock, RUnlock。Lock和Unlock是写锁的加锁以及解锁,而RLock和RUnlock自然就是读锁的加锁和解锁了。


面试题

Go 当中同步锁有什么特点?作用是什么?

  1. 阻塞。用于并发操作之间数据的安全保障。

以上是关于GoLang同步锁 Mutex的主要内容,如果未能解决你的问题,请参考以下文章

golang/go语言sync同步包中的WaitGroup等待组Mutex互斥锁和RWMutex读写锁

golang/go语言sync同步包中的WaitGroup等待组Mutex互斥锁和RWMutex读写锁

golang/go语言sync同步包中的WaitGroup等待组Mutex互斥锁和RWMutex读写锁

golang管道

golang mutex互斥锁源码分析

Golang 基础:底层并发原语 Mutex RWMutex Cond WaitGroup Once等使用和基本实现