44 lines
592 B
Markdown
44 lines
592 B
Markdown
|
# [sync](https://golang.org/pkg/sync/)
|
||
|
|
||
|
Use `Mutext` to prevent accessing variable from different goroutine at the same time:
|
||
|
|
||
|
```go
|
||
|
type foo struct {
|
||
|
mu sync.Mutext
|
||
|
|
||
|
bar map[string]string
|
||
|
}
|
||
|
|
||
|
func (f *foo) doSomething {
|
||
|
f.mu.Lock()
|
||
|
defer f.mu.Unlock()
|
||
|
|
||
|
// do the thing
|
||
|
}
|
||
|
|
||
|
```
|
||
|
|
||
|
Use `RWMutex` if there are many readers, and few writers:
|
||
|
|
||
|
```go
|
||
|
type foo struct {
|
||
|
mu sync.RWMutext
|
||
|
|
||
|
bar map[string]string
|
||
|
}
|
||
|
|
||
|
func (f *foo) read {
|
||
|
f.mu.RLock()
|
||
|
defer f.mu.RUnlock()
|
||
|
|
||
|
// read
|
||
|
}
|
||
|
|
||
|
func (f *foo) write {
|
||
|
f.mu.Lock()
|
||
|
defer f.mu.Unlock()
|
||
|
|
||
|
// write
|
||
|
}
|
||
|
```
|