前言
Go语言的异步和锁学习笔记
互斥锁
定义锁
1
| var lock = new(sync.Mutex)
|
上锁
解锁
读写锁
定义锁
1
| var lock = sync.RWMutex{}
|
1
| var lock = new(sync.RWMutex)
|
写锁
上锁
解锁
读锁
上锁
解锁
只执行一次
1 2 3 4
| var o = &sync.Once{} o.Do(func() { ... })
|
等待执行完成
创建对象
1
| var waitGroup = &sync.WaitGroup{}
|
设置等待次数
等待执行完成
执行完的协程结束等待
并发Map
定义并发Map
存数据
取数据
读的时候没有就存数据
1
| m.LoadOrStore("key", "value")
|
读完后直接删除数据
删除数据
遍历数据
- 函数返回true会立即继续遍历,返回false会立即退出遍历
1 2 3
| m.Range(func(key, value interface{}) bool { return true })
|
并发池
定义并发池
存数据
取数据
- 如果池中有数据,会随机返回一个数据
- 如果池中没有数据,会返回nil
Cond
创建对象
1
| var c = sync.NewCond(&sync.Mutex{})
|
上锁
解锁
等待
解除一个等待
解除所有等待
完成
参考文献
哔哩哔哩——郭宏志-老郭
哔哩哔哩——go圈里最会写js的奇淼