26 lines
306 B
Go
26 lines
306 B
Go
package main
|
|
|
|
import "sync"
|
|
|
|
func withLock(mutex sync.Locker, action func()) {
|
|
if action == nil {
|
|
return
|
|
}
|
|
|
|
mutex.Lock()
|
|
defer mutex.Unlock()
|
|
|
|
action()
|
|
}
|
|
|
|
func main() {
|
|
mutex := sync.RWMutex{}
|
|
withLock(&mutex, func() {
|
|
// write lock
|
|
})
|
|
|
|
withLock(mutex.RLocker(), func() {
|
|
// read lock
|
|
})
|
|
}
|