From 07c3e1c719afea6fe6133c1c640286bf723104f0 Mon Sep 17 00:00:00 2001 From: Xargin Date: Fri, 15 Jan 2016 00:58:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=8D=E9=80=9A=E9=A1=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch9/ch9-02.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch9/ch9-02.md b/ch9/ch9-02.md index 2de49a7..e556c05 100644 --- a/ch9/ch9-02.md +++ b/ch9/ch9-02.md @@ -83,7 +83,7 @@ func Withdraw(amount int) bool { } ``` -函数终于给出了正确的结果,但是还有一点讨厌的副作用。当过多的取款操作同时执行时,balance可能会瞬时被减到0以下。这可能会引起一个并发的取款被不合逻辑地拒绝。所以如果Bob尝试买一辆sports car时,Alice可能就没办法为她的早咖啡付款了。这里的问题是取款不是一个原子操作:它包含了三个分别的操作,每一个都需要去获取并释放互斥锁,但任何一个都不会锁上整个序列。 +函数终于给出了正确的结果,但是还有一点讨厌的副作用。当过多的取款操作同时执行时,balance可能会瞬时被减到0以下。这可能会引起一个并发的取款被不合逻辑地拒绝。所以如果Bob尝试买一辆sports car时,Alice可能就没办法为她的早咖啡付款了。这里的问题是取款不是一个原子操作:它包含了三个步骤,每一步都需要去获取并释放互斥锁,但任何一次锁都不会锁上整个取款流程。 理想情况下,取款应该只在整个操作中获得一次互斥锁。下面这样的尝试是错误的: