我想纠正一下 golang 中这(又)一个广为流传的误解:“Channel 优于锁机制” 或者 "Channel 取代锁机制"。对于很多情况下,我们既可以使用锁机制,也可以使用 Channel 来实现同一个目标,然而实际针对某个特定问题时,可能使用 Channel 会更加方便,但另外一些问题,使用锁机制会更加方便。Go wiki 上给出了一个回答:
Use whichever is most expressive and/or most simple.
Channel 和锁机制在 golang 中不是替代和被替代的关系。如果你试图用一种方式解决所有问题,那么必定会遇到让你抓狂的情况。最后附上一句话:
Share memory by communicating, don't communicate by sharing memory.
##锁的使用
1、互斥锁
互斥锁是传统并发程序对共享资源进行访问控制的主要手段。它由标准库代码包sync中的Mutex结构体类型代表。sync.Mutex类型只有两个公开的方法——Lock和Unlock。
2、读写锁
有疑问加站长微信联系(非本文作者)