Go Sync Waitgroup Mutex Once Atomic Concurrency Primitives
Definisi
Package sync menyediakan primitive untuk mengkoordinasikan goroutine: sync.WaitGroup untuk menunggu banyak goroutine selesai, sync.Mutex/sync.RWMutex untuk mutual exclusion, sync.Once untuk inisialisasi sekali jalan, dan sync.Pool untuk reuse objek. Untuk counter sederhana, sync/atomic lebih ringan.
Kapan dipakai
- WaitGroup: spawn N worker lalu tunggu semua selesai sebelum lanjut.
- Mutex: akses bersama ke map/struct yang bisa diubah dari banyak goroutine.
- RWMutex: banyak baca, jarang tulis (cache, config).
- Once: lazy init yang harus sekali saja (singleton, setup DB).
- atomic: increment/decrement atau flag tanpa mutex penuh.
Cara kerja
WaitGroup
var wg sync.WaitGroup
for _, item := range items {
wg.Add(1