#原子 #未初始化 #操作 #整数 #复制 #无分配 #字节

nightly 无 std atomic-maybe-uninit

对可能未初始化的整数的原子操作

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 并发

Download history 1/week @ 2024-05-30 5/week @ 2024-06-06 2/week @ 2024-06-13 1/week @ 2024-06-20 1/week @ 2024-06-27 66/week @ 2024-07-04 75/week @ 2024-07-11 2/week @ 2024-07-18 198/week @ 2024-07-25 49/week @ 2024-08-01

每月 389 次下载

Apache-2.0 OR MIT

1MB
15K SLoC

atomic-maybe-uninit

crates.io docs.rs license msrv github actions cirrus ci

对可能未初始化的整数进行原子操作。

动机

通过标准库的原子类型复制包含未初始化字节的类型(例如填充),因为复制过程涉及整数,所以这是未定义行为

此 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)。

如果您支持的目标尚未支持,请随时提交问题。

许可证

根据您的选择,许可协议为Apache License,版本2.0MIT许可证

除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,将根据上述许可证双重许可,不附加任何额外条款或条件。

无运行时依赖