sync.mutex 源代码分析
sync.Mutex是Go标准库中常用的一个排外锁。当一个 goroutine 获得了这个锁的拥有权后, 其它请求锁的 goroutine 就会阻塞在 Lock 方法的调用上,直到锁被释放。
sync.Mutex的实现也是经过多次的演化,功能逐步加强,增加了公平的处理和饥饿机制。
初版的 Mutex
首先我们来看看Russ Cox在2008提交的第一版的Mutex实现。
1type Mutex struct {
2 key int32;
3 sema int32;
4}
5
6func xadd(val *int32, delta int32) (new int32) {
7 for {
8 v := *val;
9 if cas(val, v, v+delta) {
10
