tao-of-rust-codes
tao-of-rust-codes copied to clipboard
「第十一章」11.3 示例和描述有误
第11章
11.3示例和下面描述 不太匹配,需要重新修正示例。
楼上的描述也不对,第4行与第5行的次序无所谓,只要它们都执行就行了。 关键在于:第2、3、5行要在一个原子操作里面完成。
出问题的情况是,涉及两次转帐。假设 from 提出两次转帐出去,金额均为 100, 但它的帐上只有 150,那么应该第二次是失败的! 但是现在,现在并发,两次判断(第2行取值)先执行,发现,150>100,即余额都够(第3行都过去)。 于是,两次执行第5行,结果,帐上余额成 -50 了 !
跟串行代码的乱序执行没有关系。乱序执行本来就是因果无关的串行代码允许的一种优化编排。
@xie-jirong 感谢补充,后面看看如何修改