2 个不稳定版本

0.2.0 2021 年 9 月 12 日
0.1.0 2020 年 5 月 20 日

#141 in 并发

Download history 20776/week @ 2024-03-14 25200/week @ 2024-03-21 17285/week @ 2024-03-28 26462/week @ 2024-04-04 15451/week @ 2024-04-11 18330/week @ 2024-04-18 25020/week @ 2024-04-25 20918/week @ 2024-05-02 17888/week @ 2024-05-09 16686/week @ 2024-05-16 18606/week @ 2024-05-23 21894/week @ 2024-05-30 19408/week @ 2024-06-06 12367/week @ 2024-06-13 13614/week @ 2024-06-20 13037/week @ 2024-06-27

61,978 每月下载量
用于 43 个 Crates (4 个直接使用)

MIT/Apache

33KB
216

atomic-shim

不支持架构的原子类型适配器。

此包为 std::sync::AtomicU64std::sync::AtomicI64 提供了针对 mipspowerpc 的适配器。

std 原语不是在所有平台上都可用,这使得为 mips,例如 OpenWRT 路由器编写代码变得复杂。此包提供了它自己的 AtomicU64AtomicI64,可以直接替换 std::sync 结构。

该包执行目标检测,并在支持的平台使用 std::sync 结构。当检测到它在不受支持的平台运行时,它回退到适配器实现,使用 crossbeam Mutex。

出于测试目的,以及其他原因,您可以使用 features = ["mutex"]

用法

将任何 use std::sync::AtomicU64; 的导入替换为 use atomic_shim::Atomic64;

安装

将依赖项添加到您的 Cargo.toml,并且可选地,公开 mutex 功能以测试而无需交叉编译

[dependencies]
atomic-shim = "*"

# Optional
#[features]
#mutex = ["atomic-shim/mutex"]

测试

要运行测试,启用 --features mutex 很重要。

cargo test --features mutex

示例

一个简单的自旋锁

use std::sync::Arc;
use std::sync::atomic::Ordering;
use std::thread;
use atomic_shim::AtomicU64;

fn main() {
    let spinlock = Arc::new(AtomicU64::new(1));

    let spinlock_clone = spinlock.clone();
    let thread = thread::spawn(move|| {
        spinlock_clone.store(0, Ordering::SeqCst);
    });

    // Wait for the other thread to release the lock
    while spinlock.load(Ordering::SeqCst) != 0 {}

    if let Err(panic) = thread.join() {
        println!("Thread had an error: {:?}", panic);
    }
}

保持活动线程的全局计数

use std::sync::atomic::Ordering;
use atomic_shim::AtomicU64;

let global_thread_count = AtomicU64::new(0);

let old_thread_count = global_thread_count.fetch_add(1, Ordering::SeqCst);
println!("live threads: {}", old_thread_count + 1);

许可

许可如下

根据您的选择。

贡献

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

依赖项

约28KB