为什么自增会丢更新

多线程对同一个计数器 +1 会丢更新,是因为【0】。 原子操作模型:atomic_add 一步到位不可分;final_count(n, incs, 是否原子)——原子 = n*incs、非原子最坏只剩 incs;lost=丢了几次更新。

开始练习 →

怎么让自增不丢

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

开始练习 →

非原子最坏剩多少

按模型,3 个线程各 +10、非原子,final_count(3, 10, False) 最坏交回几? 原子操作模型:atomic_add 一步到位不可分;final_count(n, incs, 是否原子)——原子 = n*incs、非原

开始练习 →

丢了几次更新

按模型,3 个线程各 +10、非原子,lost(3, 10, False) 交回几? 原子操作模型:atomic_add 一步到位不可分;final_count(n, incs, 是否原子)——原子 = n*incs、非原子最坏只剩 inc

开始练习 →

补全:原子加

补全 atomic_add:把 d 加到 x 上、一步到位。 原子操作模型:atomic_add 一步到位不可分;final_count(n, incs, 是否原子)——原子 = n*incs、非原子最坏只剩 incs;lost=丢了几次更

开始练习 →

补全:最终计数

补全 final_count:原子 = n*incs,非原子最坏只剩 incs。 原子操作模型:atomic_add 一步到位不可分;final_count(n, incs, 是否原子)——原子 = n*incs、非原子最坏只剩 incs;

开始练习 →

补全:丢了多少

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

开始练习 →

CAS 干的是什么事

比中了当前值,才换成新的 期望对不上就重来,对上了才换 CAS(比较并交换)一步做的是【0】。 CAS 模型:cas(当前, 期望, 新值)——当前==期望才换、交回 (是否成功, 换后值);cas_ok 会不会成、apply_cas 只交

开始练习 →

CAS 失败了怎么办

比中了当前值,才换成新的 期望对不上就重来,对上了才换 CAS 发现当前值已经变了、这次没换成,通常【0】。 CAS 模型:cas(当前, 期望, 新值)——当前==期望才换、交回 (是否成功, 换后值);cas_ok 会不会成、apply

开始练习 →

CAS 为什么算原子

CAS 之所以能当同步砖用,是因为它【0】。 CAS 模型:cas(当前, 期望, 新值)——当前==期望才换、交回 (是否成功, 换后值);cas_ok 会不会成、apply_cas 只交回换后值、spins(看到的值序列, 期望)=期望

开始练习 →