tao-of-rust-codes icon indicating copy to clipboard operation
tao-of-rust-codes copied to clipboard

「第十一章」11.3 示例和描述有误

Open ZhangHanDong opened this issue 5 years ago • 3 comments

第11章

11.3示例和下面描述 不太匹配,需要重新修正示例。

ZhangHanDong avatar Dec 18 '19 13:12 ZhangHanDong

Screen Shot 2019-12-18 at 21 26 59 WechatIMG22573

ZhangHanDong avatar Dec 18 '19 13:12 ZhangHanDong

楼上的描述也不对,第4行与第5行的次序无所谓,只要它们都执行就行了。 关键在于:第2、3、5行要在一个原子操作里面完成。

出问题的情况是,涉及两次转帐。假设 from 提出两次转帐出去,金额均为 100, 但它的帐上只有 150,那么应该第二次是失败的! 但是现在,现在并发,两次判断(第2行取值)先执行,发现,150>100,即余额都够(第3行都过去)。 于是,两次执行第5行,结果,帐上余额成 -50 了 !

跟串行代码的乱序执行没有关系。乱序执行本来就是因果无关的串行代码允许的一种优化编排。

xie-jirong avatar Jan 07 '20 13:01 xie-jirong

@xie-jirong 感谢补充,后面看看如何修改

ZhangHanDong avatar Jan 09 '20 11:01 ZhangHanDong