~/Go Mutex Safe Usage Guide

Apr 14, 2021


Always use sync.Mutex to guard shared data in Go. Lock a mutex before accessing shared resources to prevent race conditions.

Use pattern:

1
2
3
4
5
var mu sync.Mutex

mu.Lock()
sharedResource++
mu.Unlock()

To ensure safety during abnormal returns, such as early returns or panics, use defer:

1
2
3
mu.Lock()
defer mu.Unlock()
sharedResource++

Never copy a mutex after it has been used. Mutexes must be pointers or struct fields, never copied or passed by value.

Avoid deadlocks: Always unlock every acquired lock. Never hold a lock while waiting for another lock or I/O.

To check for races, use go run -race.

For advanced use, consider sync.RWMutex if you need multiple readers and few writers.

For more, see the Go Doc on Mutex.

Tags: [go] [mutex] [concurrency]