使用通道并发访问对象
Last updated
Was this helpful?
Last updated
Was this helpful?
为了保护对象被并发访问修改,我们可以使用协程在后台顺序执行匿名函数来替代使用同步互斥锁。在下面的程序中我们有一个类型 Person
中包含一个字段 chF
,这是一个用于存放匿名函数的通道。
这个结构在构造函数 NewPerson()
中初始化的同时会启动一个后台协程 backend()
。backend()
方法会在一个无限循环中执行 chF
中放置的所有函数,有效地将它们序列化从而提供了安全的并发访问。更改和读取 salary
的方法会通过将一个匿名函数写入 chF
通道中,然后让 backend()
按顺序执行以达到其目的。需注意的是 Salary()
方法创建的闭包函数是如何将 fChan
通道包含在其中的。
当然,这是一个简化的例子,它不应该被用在这种案例下。但是它却向我们展示了在更复杂的场景中该如何解决这种问题。
示例:14.19-
输出:
上一节:
下一章: