成功 5 次后是多少
按无锁模型,从 0 起、成功自增 5 次,total_after(0, 5) 交回几?
无锁模型:try_incr(当前, 看到的值)——没被别人改过(当前==看到)才 +1,交回 (成否, 值);total_after(起点, 成功数)、push_ok(栈顶, 看到)、retries_needed(每次成否)=第一次成功前重试几次。
def try_incr(cur, seen):
"""一次无锁自增尝试:看到的值 seen 和当前 cur 一样(没被别人改过)才 +1 成功。"""
if cur == seen:
return (True, cur + 1)
return (False, cur)
def total_after(start, successes):
"""成功 successes 次自增后的值。"""
return start + successes
def push_ok(top, seen):
"""无锁栈 push:栈顶没变(== seen)才接得上去。"""
return top == seen
def retries_needed(attempts):
"""attempts 是每次尝试成不成的列表;到第一次成功前重试了几次。"""
return next((i for i, ok in enumerate(attempts) if ok), len(attempts))
print(total_after(0, 5))
全部评论