这次 CAS 换成功了吗
按 CAS 模型,当前 5、期望 4,cas(5, 4, 9)[0] 交回什么?
CAS 模型:cas(当前, 期望, 新值)——当前==期望才换、交回 (是否成功, 换后值);cas_ok 会不会成、apply_cas 只交回换后值、spins(看到的值序列, 期望)=期望出现前失败自旋几次。
def cas(cur, expected, new):
"""比较并交换:当前值 == 期望才换成新值;交回 (是否成功, 换后的当前值)。"""
if cur == expected:
return (True, new)
return (False, cur)
def cas_ok(cur, expected):
"""这次 CAS 会不会成功。"""
return cur == expected
def apply_cas(cur, expected, new):
"""只交回换后的当前值。"""
return new if cur == expected else cur
def spins(seen, expected):
"""期望值出现前,CAS 失败自旋了几次(seen 是每次看到的当前值序列)。"""
return next((i for i, v in enumerate(seen) if v == expected), len(seen))
print(cas(5, 4, 9)[0])
全部评论