公众号merlinsea
- sync包下的互斥锁
- 场景:当多个协程对共享变量执行写操作的时候就会发生资源竞争,需要用互斥锁。
- 特点:
- 场景:当多个协程对共享变量执行写操作的时候就会发生资源竞争,需要用互斥锁。
- 互斥锁必须是全局的,即所有协程共用同一把互斥锁
- 在需要写出执行的代码中对共享变量的写操作加锁。
- 互斥锁必须是全局的,即所有协程共用同一把互斥锁
- 管程channel
- 管道是一个队列的数据结构,数据遵循了先进先出的原则
- 管道本身是线程安全的,即多个协程操作同一个管道的时候不需要对管道进行加锁。
- 管道是有类型的,即一个string类型的管道只能放string类型的数据
- 管道是引用数据类型,即必须make以后才能使用,make的时候需要指定管道的容量,这个容量是不会改变的,后续最多也只能向这个管道中放入指定容量的数据,多了会deadlock死锁。
- 管道在close关闭以后就不能向管道中写入数据但依旧可以从管道中读取数据
- 管道的遍历只能使用for-range遍历
- 管道是一个队列的数据结构,数据遵循了先进先出的原则
- 在for-range遍历的时候如果管道没有关闭会出现deadlock死锁问题。
- 在for-range遍历的时候如果管道关闭了,则正常遍历结束。
- 因此遍历管道的注意事项: 1、关闭管道 2、 用for-range遍历
- 在for-range遍历的时候如果管道没有关闭会出现deadlock死锁问题。
- 管道实现多协程之间的通信设计
- 由于主线程推出以后,基于主线程环境创建的协程也会结束,因此必须有一个通信机制使得主线程在其他协程执行的时候阻塞。