加锁后总共加了几次
按模型,4 个线程各加 1 次,safe_total(4, 1) 交回几?
贯穿本节的并发模型(判题机 0.25 核有 GIL、答案不靠时序,这是它的确定模型,见 spine.py):高并发服务器搭起来后要选架构、加锁护状态、连接池/队列、压测、测吞吐延迟、定位竞争。
共享状态:threads 个线程各自增 per 次。加锁 safe_total=threads*per 一次不丢;无锁最坏 racy_total=per(读改写彼此覆盖、只剩一个活下来),lost=丢掉的更新数。
def safe_total(threads, per):
"""加锁:threads 个线程各自增 per 次,一次不丢。"""
return threads * per
def racy_total(per):
"""无锁最坏情况:读改写彼此覆盖,最后只剩一个线程的 per 次加成活下来。"""
return per
def lost(threads, per):
"""无锁最坏丢了多少次更新。"""
return safe_total(threads, per) - racy_total(per)
print(safe_total(4, 1))
全部评论