个人技术分享

Golang 并发 Mutex 互斥锁的使用

1. 初始化

func TestMutex(t *testing.T) {
	mu01 := sync.Mutex{}
	var mu02 sync.Mutex
}

两种方式都ok

2. Mutex使用

计数器统计,多个协程同时对同一个变量进行 ++

代码示例

var mu sync.Mutex
var counter int

func TestMutexAdd(t *testing.T) {
	var wg sync.WaitGroup
	for i := 0; i < 100; i++ {
		wg.Add(1)
		go execAdd(&wg)
	}
	wg.Wait()
	fmt.Printf("TestMutexAdd Counter: %d\n", counter)
}

func execAdd(wg *sync.WaitGroup) {
	mu.Lock()
	counter++
	mu.Unlock()
	wg.Done()
}

输出

== RUN   TestMutexAdd
TestMutexAdd Counter: 100
--- PASS: TestMutexAdd (0.00s)

3. 参考

  • https://zhuanlan.zhihu.com/p/339883404