Go cung cấp hai cách tiếp cận cho an toàn concurrency: channel ("chia sẻ bộ nhớ bằng cách giao tiếp") và package sync (mutex/khóa để bảo vệ bộ nhớ chung trực tiếp). Mặc dù Go có triết lý ưu tiên channel, các primitive sync thường là lựa chọn đơn giản hơn, hiệu quả hơn để bảo vệ trạng thái chung.
sync.Mutex — bảo vệ trạng thái chung với một khóa
Counter {
mu sync.Mutex
count
}
Increment() {
c.mu.Lock()
c.mu.Unlock()
c.count++
}
