共享变量和锁机制

除了 channel 之外,go 语言还提供了另外一种并发读写变量的方法,那就是传统编程的锁机制。

当多个 goroutine 要并发地读写某个共享变量时,如果不采取额外的处理,会出现竞争条件。 多次执行会出现不同的结果,最经典的问题就是银行转账,我们希望不管如何操作,结果都是预期的。 不管账户上多出了金额,还是少了金额,都是不可以接受的行为。通过加锁,我们可以实现变量的安全读写。

锁会影响并发的性能,因此锁的粒度要尽量小,以减少额外的开销。

我们还会介绍为什么 go 语言要提供两种并发控制机制,以及它们各自适合的使用场景。

Last updated