Merge branch 'master' of github.com:cch123/gopl-zh

This commit is contained in:
Xargin 2016-01-18 16:12:02 +08:00
commit adb165b3ef

View File

@ -83,7 +83,7 @@ func Withdraw(amount int) bool {
}
```
函数终于给出了正确的结果但是还有一点讨厌的副作用。当过多的取款操作同时执行时balance可能会瞬时被减到0以下。这可能会引起一个并发的取款被不合逻辑地拒绝。所以如果Bob尝试买一辆sports car时Alice可能就没办法为她的早咖啡付款了。这里的问题是取款不是一个原子操作它包含了三个分别的操作,每一个都需要去获取并释放互斥锁,但任何一个都不会锁上整个序列
函数终于给出了正确的结果但是还有一点讨厌的副作用。当过多的取款操作同时执行时balance可能会瞬时被减到0以下。这可能会引起一个并发的取款被不合逻辑地拒绝。所以如果Bob尝试买一辆sports car时Alice可能就没办法为她的早咖啡付款了。这里的问题是取款不是一个原子操作它包含了三个步骤,每一步都需要去获取并释放互斥锁,但任何一次锁都不会锁上整个取款流程
理想情况下,取款应该只在整个操作中获得一次互斥锁。下面这样的尝试是错误的: