这算发生 ABA 了吗
按 ABA 模型,起 A、中 A、末 A(中途没变过),aba_happened("A", "A", "A") 交回什么?
ABA 模型:aba_happened(起, 中, 末)——变过又回到起点;cas_value(当前, 期望) 只比值(识别不出 ABA);cas_tagged(当前, 版本, 期望, 期望版本) 值和版本都对才成;fooled=只比值会不会被 ABA 骗。
def aba_happened(v_start, v_mid, v_end):
"""A->B->A:中途变过、又回到起点——只看值会以为「没变过」。"""
return v_start == v_end and v_mid != v_start
def cas_value(cur, expected):
"""只比值的 CAS:当前 == 期望就成功(识别不出 ABA)。"""
return cur == expected
def cas_tagged(cur, tag, expected, exp_tag):
"""带版本号的 CAS:值和版本都对上才成功。"""
return cur == expected and tag == exp_tag
def fooled(v_start, v_mid, v_end):
"""只比值的 CAS 会不会被 ABA 骗(本该拦、却放过)。"""
return aba_happened(v_start, v_mid, v_end)
print(aba_happened("A", "A", "A"))
全部评论