跳转至

原子

原文链接: https://marabos.nl/atomics/atomics.html.

英文: Atomic.

原子 (Atomic) 一词源于希腊语 ἄτομος, 意为不可再分的.
所有其他并发原语 (例如互斥体和条件变量) 都是使用原子操作实现的.

Rust 提供多种原子类型 (std::sync::atomic), 但并非所有平台都支持所有的原子类型.

原子类型最基础的操作是 loadstore, 对应读和写操作.

Fetch-and-Modify 操作

如果只是简单的使用 load 取出值进行加法然后再 store 可能导致竞争1.
原子类型提供多种 Fetch-and-Modify 操作, 比如 fetch_add. 可以用于对原子类型做简单的加法运算, 同时保持原子性.

Compare-and-Exchange 操作

最灵活和通用的操作是 compare_exchange, 该操作也是其他 Fetch-and-Modify (如 fetch_add) 操作的实现基础.


  1. 是竞争 (race) 而非数据竞争 (data race), 数据竞争是未定义行为, 不会出现在 safe Rust 中. 

评论