#原子 #多线程 #内存顺序

atomic-story

在多线程环境中,通过示例简要概述原子操作和内存顺序

2个版本

0.1.1 2022年1月3日
0.1.0 2021年12月28日

#793 in 并发

Apache-2.0

11KB
84 代码行

Atomic Story

理解原子操作和内存顺序需要时间,也可能是一次痛苦的旅程。这是我自己的经历。

我觉得拥有一个包含简单单元测试的仓库可以帮助我加深对这个主题的理解。此外,这是一种非常紧凑的知识传递方式——这就是为什么我将其公开的原因。

结构

一个计数器:一个写者和一个读者

这是一个最简单的例子。使用 Relaxed 就足够了,因为我们只是在所有线程都增加值之后检查最终值。

两个有依赖关系的数字。

这个例子更有趣。有两个线程:一个写者和一个读者。还有两个值,num_anum_b。这个例子探讨了不同的 Ordering 组合以及它们如何产生不同的结果。

如何运行测试/示例

它们只是 Rust 测试。运行

cargo test

lib.rs:

Atomic Story

理解原子操作和内存顺序需要时间,也可能是一次痛苦的旅程。这是我自己的经历。

我觉得拥有一个包含简单单元测试的仓库可以帮助我加深对这个主题的理解。此外,这是一种非常紧凑的知识传递方式——这就是为什么我将其公开的原因。

结构

一个计数器:一个写者和一个读者

这是一个最简单的例子。使用 Relaxed 就足够了,因为我们只是在所有线程都增加值之后检查最终值。

两个有依赖关系的数字。

这个例子更有趣。有两个线程:一个写者和一个读者。还有两个值,num_anum_b。这个例子探讨了不同的 Ordering 组合以及它们如何产生不同的结果。

如何运行测试/示例

cargo test

依赖关系

~6–32MB
~426K SLoC