Skip to content

Day 11 - 同步原语

WaitGroup

go
var wg sync.WaitGroup

for i := 0; i < 5; i++ {
    wg.Add(1)
    go func() {
        defer wg.Done()
        // work
    }()
}
wg.Wait()

Mutex

go
var mu sync.Mutex
var counter int

mu.Lock()
counter++
mu.Unlock()

RWMutex

go
var rwmu sync.RWMutex

// 读操作
rwmu.RLock()
readValue := counter
rwmu.RUnlock()

// 写操作
rwmu.Lock()
counter++
rwmu.Unlock()

Once

go
var once sync.Once

once.Do(func() {
    fmt.Println("只执行一次")
})

面试考点

问题:Mutex和RWMutex的区别?

答案:

  • Mutex:互斥锁,任何操作都需要获取锁
  • RWMutex:读写锁,读操作可以并发,写操作需要独占

使用场景:读多写少时用RWMutex提高并发性能。


📅 学习进度

Day主题状态
01-10基础/并发
11同步原语
12错误处理

本文为Go 30天学习计划第11天内容

📚 导航

| ← Day 10 - 上一章 | Day 12 - 下一章 →

最后更新: