怎么防住 ABA
要让 CAS 不被 ABA 骗过,常用办法是【0】。 ABA 模型:aba_happened(起, 中, 末)——变过又回到起点;cas_value(当前, 期望) 只比值(识别不出 ABA);cas_tagged(当前, 版本, 期望,
这算发生 ABA 了吗
按 ABA 模型,起 A、中 A、末 A(中途没变过),aba_happened("A", "A", "A") 交回什么? ABA 模型:aba_happened(起, 中, 末)
补全:是不是 ABA
补全 aba_happened:回到起点、且中途变过。 ABA 模型:aba_happened(起, 中, 末)——变过又回到起点;cas_value(当前, 期望) 只比值(识别不出 ABA);cas_tagged(当前, 版本, 期望,
补全:只比值的 CAS
补全 cas_value:只比当前和期望的值。 ABA 模型:aba_happened(起, 中, 末)——变过又回到起点;cas_value(当前, 期望) 只比值(识别不出 ABA);cas_tagged(当前, 版本, 期望, 期望版
补全:带版本号的 CAS
补全 cas_tagged:值和版本都对上才成。 ABA 模型:aba_happened(起, 中, 末)——变过又回到起点;cas_value(当前, 期望) 只比值(识别不出 ABA);cas_tagged(当前, 版本, 期望, 期望
补全:会不会被 ABA 骗
补全 fooled:只比值时,ABA 会骗过它。 ABA 模型:aba_happened(起, 中, 末)——变过又回到起点;cas_value(当前, 期望) 只比值(识别不出 ABA);cas_tagged(当前, 版本, 期望, 期望
真机上怎么算把问题修好了
在受控容器里,可见性/丢更新问题算修好的标准是【0】。 (本机受控:0.25 核有 GIL,用「读-睡-写」稳定复现,纯 Python。)
从现象认没同步的毛病
无同步的并发程序出问题,下面哪些和「没同步」直接相关? A. 读到了还没更新的旧值 B. 并发自增丢了更新 C. 结果时对时错不稳定 D. 程序里有个拼写错误跑不起来
跑出没同步时的旧值
场景:~/vis/无同步.py 里工作线程睡一会儿才写入新值,主线程没等它就先读——读到旧值。 任务:跑它、看主线程打印出的那个旧值,到 ~/对照表.txt 里查它对应的标记。 (判分只看你在受控容器里做出的证据,纯本机、纯 Python,
跑出加同步后的正确值
场景:~/vis/有同步.py 用同步等工作线程写完再读。 任务:跑它、看主线程打印出的正确值,到 ~/对照表.txt 里查它对应的标记。 (判分只看你在受控容器里做出的证据,纯本机、纯 Python,不碰公网。) (本机受控环境:0.25