mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-12-25 22:38:56 +00:00
Merge branch 'master' of github.com:cch123/gopl-zh
This commit is contained in:
commit
adb165b3ef
@ -83,7 +83,7 @@ func Withdraw(amount int) bool {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
函数终于给出了正确的结果,但是还有一点讨厌的副作用。当过多的取款操作同时执行时,balance可能会瞬时被减到0以下。这可能会引起一个并发的取款被不合逻辑地拒绝。所以如果Bob尝试买一辆sports car时,Alice可能就没办法为她的早咖啡付款了。这里的问题是取款不是一个原子操作:它包含了三个分别的操作,每一个都需要去获取并释放互斥锁,但任何一个都不会锁上整个序列。
|
函数终于给出了正确的结果,但是还有一点讨厌的副作用。当过多的取款操作同时执行时,balance可能会瞬时被减到0以下。这可能会引起一个并发的取款被不合逻辑地拒绝。所以如果Bob尝试买一辆sports car时,Alice可能就没办法为她的早咖啡付款了。这里的问题是取款不是一个原子操作:它包含了三个步骤,每一步都需要去获取并释放互斥锁,但任何一次锁都不会锁上整个取款流程。
|
||||||
|
|
||||||
理想情况下,取款应该只在整个操作中获得一次互斥锁。下面这样的尝试是错误的:
|
理想情况下,取款应该只在整个操作中获得一次互斥锁。下面这样的尝试是错误的:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user