共享变量和锁机制
除了 channel 之外,go 语言还提供了另外一种并发读写变量的方法,那就是传统编程的锁机制。
当多个 goroutine 要并发地读写某个共享变量时,如果不采取额外的处理,会出现竞争条件。 多次执行会出现不同的结果,最经典的问题就是银行转账,我们希望不管如何操作,结果都是预期的。 不管账户上多出了金额,还是少了金额,都是不可以接受的行为。通过加锁,我们可以实现变量的安全读写。
锁会影响并发的性能,因此锁的粒度要尽量小,以减少额外的开销。
我们还会介绍为什么 go 语言要提供两种并发控制机制,以及它们各自适合的使用场景。
Last updated