补全:要不要同步

补全 needs_sync:共享变量被写、又被别的线程读,就要同步。 贯穿本节的可见性模型(判题机有 GIL、复现不出真缓存问题,这是它的确定契约):sees(写方发布, 读方同步)——两个都为真才保证读到新值;stale=没同步会读到旧值

开始练习 →

指令重排序是什么

编译器/CPU 的重排序,指的是【0】。 重排序模型:independent(a写, b读)=写的不是读的(无依赖)才可能被重排;can_reorder(a写, b读, 屏障)=无依赖且中间没屏障才可能被重排;orders_kept(相邻对

开始练习 →

重排在单线程里为什么没事

重排序在单线程里不出问题,是因为【0】。 重排序模型:independent(a写, b读)=写的不是读的(无依赖)才可能被重排;can_reorder(a写, b读, 屏障)=无依赖且中间没屏障才可能被重排;orders_kept(相邻对

开始练习 →

内存屏障干什么用

加一道内存屏障,作用是【0】。 重排序模型:independent(a写, b读)=写的不是读的(无依赖)才可能被重排;can_reorder(a写, b读, 屏障)=无依赖且中间没屏障才可能被重排;orders_kept(相邻对, 屏障)

开始练习 →

有屏障还能重排吗

按重排模型,两条无依赖指令中间有屏障,can_reorder("x", "y", True) 交回什么? 重排序模型:independent(a写, b读)=写的不是读的(无依赖)才可能被重排;can

开始练习 →

还有几对可能被重排

按模型,两对相邻指令、无屏障,orders_kept([("x","y"),("p","q")], False) 交回几? 重排序模型:independent(

开始练习 →

补全:两条有没有依赖

补全 independent:一条写的不是另一条读的,才无依赖。 重排序模型:independent(a写, b读)=写的不是读的(无依赖)才可能被重排;can_reorder(a写, b读, 屏障)=无依赖且中间没屏障才可能被重排;ord

开始练习 →

补全:能不能被重排

补全 can_reorder:无依赖且中间没屏障才可能被重排。 重排序模型:independent(a写, b读)=写的不是读的(无依赖)才可能被重排;can_reorder(a写, b读, 屏障)=无依赖且中间没屏障才可能被重排;orde

开始练习 →

补全:数还能重排几对

补全 orders_kept:数还可能被重排的相邻对。 重排序模型:independent(a写, b读)=写的不是读的(无依赖)才可能被重排;can_reorder(a写, b读, 屏障)=无依赖且中间没屏障才可能被重排;orders_k

开始练习 →

原子操作是什么

原子操作指的是【0】。 原子操作模型:atomic_add 一步到位不可分;final_count(n, incs, 是否原子)——原子 = n*incs、非原子最坏只剩 incs;lost=丢了几次更新。

开始练习 →