读方没同步能看到吗
按可见性模型,写方发布了但读方没同步,sees(True, False) 交回什么?
贯穿本节的可见性模型(判题机有 GIL、复现不出真缓存问题,这是它的确定契约):sees(写方发布, 读方同步)——两个都为真才保证读到新值;stale=没同步会读到旧值;needs_sync(被写, 被别人读)=要不要同步。
def sees(writer_published, reader_synced):
"""读线程看到写线程的新值:要写方发布了、读方也做了同步,两个都成立才保证看到。"""
return writer_published and reader_synced
def stale(writer_published, reader_synced):
"""没同步就可能读到旧值。"""
return not sees(writer_published, reader_synced)
def needs_sync(shared_written, read_by_other):
"""有共享变量被写、又被别的线程读 —— 就需要同步。"""
return shared_written and read_by_other
print(sees(True, False))
全部评论