解决竞态的方式
通过 信道 和 mutex 都可以实现。
几个概念
临界区(Critical Section): 简单来说,当有多个协程或者线程修改共享资源的代码(或者说是导致竞态条件发生的代码区)。
竞态条件:简单来说,当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。
Mutex
mutex 用于提供一种加锁机制,可确保在某时刻只有一个协程在临界区运行,以防止出现竞态条件。
mutexs是Go的sync包中的一个数据结构,定义了两个方法:Lock 和 Unlock。所有在 Lock 和 Unlock 之间的代码,都只能由一个 Go 协程执行,于是就可以避免竞态条件。
发生临界区的情况?
package main
import (
"fmt"