知识卡片
锁保护共享内存
内容
共享内存模型下,多个 goroutine 修改同一变量必须用锁等同步手段保护,否则会产生竞态。发散:锁和 channel 不是敌人;锁适合保护共享状态,channel 适合传递所有权和事件。map这类容器的同步要求见[[共享Map需同步]]。
参考来源
- 位置:《Go语言入门到实战(共3册)》第20章《Go语言编程入门与实战技巧:第10章 并发编程》(源文件:_epub-src/text/part0032_split_000.html)
- 结论依据:原文围绕“共享了变量counter”给出定义、机制、流程、对比或限制条件,本卡片据此提炼可迁移的语言/工程结论,并补充了边界或实践启发。
- 原始内容:是常说的共享内存。 将代码修改为如下形式: 此时这个例子终于可以正常工作了。在上面的例子中,在10个goroutine中共享了变量counter。每个goroutine执行完成后,将counter的值加1。因为10个goroutine是并发执行的,所以还引入了锁,也就是代码中的lock 变量。每次对……