面试题答案
一键面试- 原理:
Mutex
(互斥锁)是Go语言标准库sync
包提供的一种同步原语。当一个协程获取到Mutex
锁后,其他协程在该锁被释放前无法获取该锁,从而避免多个协程同时读写共享变量count
,保证了并发安全。
- 代码示例:
package main
import (
"fmt"
"sync"
)
var (
count int
mu sync.Mutex
)
func increment(wg *sync.WaitGroup) {
defer wg.Done()
mu.Lock()
count++
mu.Unlock()
}
func main() {
var wg sync.WaitGroup
numRoutines := 100
for i := 0; i < numRoutines; i++ {
wg.Add(1)
go increment(&wg)
}
wg.Wait()
fmt.Println("Final count:", count)
}
在上述代码中:
- 定义了全局变量
count
和mu
(Mutex
类型)。 increment
函数用于对count
进行自增操作,在操作前通过mu.Lock()
获取锁,操作完成后通过mu.Unlock()
释放锁。main
函数中启动了100个协程并发执行increment
函数,使用sync.WaitGroup
等待所有协程完成,最后输出count
的最终值。