076-使用通信的方式共享内存
Posted --Allen--
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了076-使用通信的方式共享内存相关的知识,希望对你有一定的参考价值。
希望你还能记得住这句话:
“不要使用共享数据的方式进行通信,而应该使用通信的方式来共享数据。”
这一节,我们秉承这一理念,来改写前面的银行账户存款问题。
1. 思路
- 使用 channel 对控制共享数据。
- 不要将共享数据暴露出去。
其实第二条就可以使用第一条来实现。我们使用一个函数来维护这个共享数据。假设该函数叫 monitor.
完整的程序如下:
// gopl/sync/transaction/bank_monitor/bank.go
package bank
var deposits = make(chan int)
var balances = make(chan int)
// monitor 管理 balance 变量
func monitor()
var balance int
// 使用 channel 控制对共享数据的访问
for
select
case amount := <-deposits:
balance += amount
case balances <- balance:
func Deposit(amount int)
deposits <- amount
func Balance() int
return <-balances
// 这是一个永远不会停止的 goroutine
func init()
go monitor()
上面的 monitor 函数被称之为监控函数,而 go monitor()
则是监控 goroutine.
2. 总结
- 掌握如何使用通信的方法来共享数据
以上是关于076-使用通信的方式共享内存的主要内容,如果未能解决你的问题,请参考以下文章