丢了几次更新
按模型,3 个线程各 +10、非原子,lost(3, 10, False) 交回几?
原子操作模型:atomic_add 一步到位不可分;final_count(n, incs, 是否原子)——原子 = n*incs、非原子最坏只剩 incs;lost=丢了几次更新。
def atomic_add(x, d):
"""原子加:读-改-写一步到位、不可分。"""
return x + d
def final_count(n_threads, incs, atomic):
"""n 个线程各 +incs 次:原子的结果确定 = n*incs;非原子会丢更新、最坏只剩 incs。"""
return n_threads * incs if atomic else incs
def lost(n_threads, incs, atomic):
"""丢了多少次更新(原子 = 0)。"""
return 0 if atomic else (n_threads - 1) * incs
print(lost(3, 10, False))
全部评论