Mutex 扩展
如何基于 Mutex 实现一个可重入锁
1. Mutex 的扩展
上一节我们介绍了 Mutex 的实现原理,这一节我们来看看如何基于标准库的 Mutex 来扩展 Mutex 提供的并发原语,包括:
- 实现一个可重入锁
- TryLock
- 获取等待者的数量
- 实现一个线程安全的队列
2. 可重入锁
实现可重入锁的关键是要锁能记住当前哪个 goroutine 持有锁,这里有两个方案:
如何基于 Mutex 实现一个可重入锁
上一节我们介绍了 Mutex 的实现原理,这一节我们来看看如何基于标准库的 Mutex 来扩展 Mutex 提供的并发原语,包括:
实现可重入锁的关键是要锁能记住当前哪个 goroutine 持有锁,这里有两个方案:
Go 第一个并发原语 Mutex 互斥锁
互斥锁是最基本的并发原语,使用互斥锁,限定临界区只能同时由一个线程持有。基本上所有编程语言都会提供,Go 中互斥锁为 Mutex,Mutex 位于标准库 sync 中,其实现了 sync 中的 Locker 接口:
这个系列我们开始学习 Go 语言的第四个部分: 并发编程。
Go 语言的并发编程,我们学习的核心内容来自于极客时间的专栏Go 并发编程实战课,作者网名鸟窝。这个专栏在极客时间上的订阅并不多,但绝对是五星推荐。
前面我们介绍 Go 项目工程化提到了 /api 目录。这目录是协议定义目录,用于存放约定项目接口的 IDL 文件。按照现在的主流基本都是 Protobuf 文件。Protobuf 的管理和共享就是今天的话题。
最近几篇文章与 Go 工程化方面有关,算是我们 Go 语言学习的第二部分,了解一门语言的惯例,即最佳实践。无论是做什么开发,在做之前先 google 一下 best practice 是一个非常好的习惯。今天这篇文章与 go 工程化项目结构有关,知识来自于 极客时间-毛剑老师的 Go 工程化实践。