15 个版本
0.3.2 | 2024 年 7 月 10 日 |
---|---|
0.3.1 | 2023 年 10 月 14 日 |
0.2.22 | 2023 年 8 月 15 日 |
0.2.19 | 2023 年 7 月 27 日 |
0.2.4 | 2022 年 3 月 20 日 |
#273 in 并发
每月 389 次下载
1MB
15K SLoC
atomic-maybe-uninit
对可能未初始化的整数进行原子操作。
动机
通过标准库的原子类型复制包含未初始化字节的类型(例如填充),因为复制过程涉及整数,所以这是未定义行为。
此 crate 提供了一种安全执行此类操作的方法。
平台支持
目前支持 x86、x86_64、ARM、AArch64、RISC-V、LoongArch64、MIPS32、MIPS64、PowerPC、s390x、MSP430、Arm64EC、AVR 和 Hexagon。
target_arch | 原语 | 加载/存储 | 交换/CAS |
---|---|---|---|
x86 | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64 | ✓ | ✓ |
x86_64 | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64 | ✓ | ✓ |
x86_64 (+cmpxchg16b) [5] | i128、u128 | ✓ | ✓ |
arm (v6+ 或 Linux/Android) | isize、usize、i8、u8、i16、u16、i32、u32 | ✓ | ✓[1] |
arm (除 M-profile) | i64、u64 | ✓ | ✓ |
aarch64 | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64、i128、u128 | ✓ | ✓ |
riscv32 | isize、usize、i8、u8、i16、u16、i32、u32 | ✓ | ✓[1] |
riscv64 | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64 | ✓ | ✓[1] |
loongarch64 [3] | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64 | ✓ | ✓ |
mips / mips32r6 [4] | isize、usize、i8、u8、i16、u16、i32、u32 | ✓ | ✓ |
mips64 / mips64r6 [4] | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64 | ✓ | ✓ |
powerpc [4] | isize、usize、i8、u8、i16、u16、i32、u32 | ✓ | ✓ |
powerpc64 [4] | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64 | ✓ | ✓ |
powerpc64 (pwr8+) [4] [6] | i128、u128 | ✓ | ✓ |
s390x [4] | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64、i128、u128 | ✓ | ✓ |
msp430 [4] | isize、usize、i8、u8、i16、u16 | ✓ | |
arm64ec [4](实验性) | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64、i128、u128 | ✓ | ✓ |
avr [4](实验性) | isize、usize、i8、u8、i16、u16 | ✓ | ✓ |
hexagon [4](实验性) | isize、usize、i8、u8、i16、u16、i32、u32、i64、u64 | ✓ | ✓ |
[1] ARM 的原子 RMW 操作在 v6-m (thumbv6m) 上不可用。RISC-V 的原子 RMW 操作在不具有 A(或 G 表示 IMAFD)扩展的目标上不可用,例如 riscv32i、riscv32imc 等。
[2] ARMv6+ 或 Linux/Android,除 M-profile 架构(如 thumbv6m、thumbv7m 等)外。
[3] 需要 Rust 1.72+。
[4] 由于需要 #![feature(asm_experimental_arch)]
,需要 nightly。
[5] 需要 cmpxchg16b 目标功能(在 Apple 和 Windows(除 Windows 7)目标上默认启用)。
[6] 需要 target-cpu pwr8+(powerpc64le 默认为 pwr8)。
如果您支持的目标尚未支持,请随时提交问题。
相关项目
- portable-atomic:支持128位原子类型、原子浮点数等的可移植原子类型。
- atomic-memcpy:按字节原子memcpy。
许可证
根据您的选择,许可协议为Apache License,版本2.0或MIT许可证。
除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,将根据上述许可证双重许可,不附加任何额外条款或条件。