知识卡片
通道传递指针的并发安全责任
内容
布尔值、数字、字符串通过通道发送天然安全,因为它们要么是拷贝传递要么本身不可变,多个goroutine各自拿到的是独立副本,不存在谁改了谁的问题。另一种思路是只导出不会修改状态的方法,把会修改状态的方法设为非导出、只在包内单个goroutine里使用,靠包边界而不是锁来保证串行访问。发散:这说明Go的”通道代替锁”并不是免费的午餐——通道解决的是同步和通信的机制问题,数据本身该如何在goro。
参考来源
- 位置:《Go语言程序设计》第7章《并发编程》(源文件:_epub-src/OEBPS/text00035.html)
- 结论依据:原文在该章节围绕“布尔值、数字、字符串通过通道发送天然安全,因为它们要么是拷贝传递要么本身不可变,多个goroutine各自拿到…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:上略有区别外。接下来的3个例子将把我们带离舒适地带,开始展示Go语言的一些特有功能,比如特有的Go语言类型,文件处理(包括错误处理)和以值方式传递函数,以及使用goroutine和通道(channel)进行并行编程等。 1.5 栈——自定义类型及其方法 虽然Go语言支持面向对象编程,但它既没有类也没有继承(is-a关系)这样的概念。但是G…