第九章 使用共享变量实现并发
- 基本上就是锁的概念
- 活锁:多个线程在尝试绕开死锁, 由于过分同步导致反复冲突
竞态
- 对于绝大多数变量,如要回避并发访问, 要么限制变量只存在在一个goroutine内, 要么维护一个更高层的互斥不变量,
- 定义,数据竞态发生于两个goroutine并发读写同一个变量并且至少其中一个是写入时, 从定义来说, 避免数据竞态可以有三种方法,
- 不改
- 避免多个goroutine同时访问一个变量
- 互斥
- 第一种比较容易实现
- 第二种可以通过使用唯一的goroutine 来获取其信息, 然后其他goroutine如果向该goroutine 来发送请求来操作, “不要通过共享内存来通信, 而是要通过通信来共享内存”
1 |