Go死锁
目录
死锁是指多个并发执行单元(如 goroutine)互相等待对方释放资源,导致所有相关方都无法继续执行的状态。在 Go 中,死锁通常发生在 channel 操作或 锁(mutex) 的使用不当时,例如pv不当操作。
容量=0
读写必须严格同步,适用于精确控制。
容量>0
允许临时存储数据,适用于解耦和流量控制。
发送方负责关闭 Channel,避免接收方死锁!
根据生产者和消费者的速度差:
- 如果生产者快,消费者慢:增大容量避免阻塞。
- 如果消费者快,生产者慢:小容量即可。
不关闭 Channel 会怎样?
- 无缓冲 Channel:通常不需要关闭(除非明确需要通知接收方)。
- 有缓冲 Channel:如果接收方用
for range
循环,必须关闭以避免死锁: