2 个不稳定版本
0.2.0 | 2021 年 9 月 12 日 |
---|---|
0.1.0 | 2020 年 5 月 20 日 |
#141 in 并发
61,978 每月下载量
用于 43 个 Crates (4 个直接使用)
33KB
216 行
atomic-shim
不支持架构的原子类型适配器。
此包为 std::sync::AtomicU64
和 std::sync::AtomicI64
提供了针对 mips
和 powerpc
的适配器。
std
原语不是在所有平台上都可用,这使得为 mips
,例如 OpenWRT 路由器编写代码变得复杂。此包提供了它自己的 AtomicU64
和 AtomicI64
,可以直接替换 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版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
根据您的选择。
贡献
除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以供包含在作品中的任何贡献,均应按上述方式双重授权,不附加任何额外条款或条件。
依赖项
约28KB