9 个不稳定版本 (3 个破坏性更新)
0.3.2 | 2021年2月5日 |
---|---|
0.3.1 | 2021年2月3日 |
0.3.0 | 2021年1月22日 |
0.2.1 | 2020年9月4日 |
0.0.1 | 2019年11月13日 |
#925 in 并发
每月下载量 27
1MB
968 行
包含 (WOFF 字体, 190KB) docs/FiraSans-Medium.woff, (WOFF 字体, 185KB) docs/FiraSans-Regular.woff, (WOFF 字体, 94KB) docs/SourceSerifPro-Bold.ttf.woff, (WOFF 字体, 89KB) docs/SourceSerifPro-Regular.ttf.woff, (WOFF 字体, 56KB) docs/SourceCodePro-Regular.woff, (WOFF 字体, 56KB) docs/SourceCodePro-Semibold.woff 和更多。
spin-sync
spin-sync 是一个提供使用自旋锁的同步原语的模块。 (Wikipedia 自旋锁)
主要特性如下。
- 声明公共结构体
Mutex
,RwLock
,Once
,Barrier
。接口类似于std::sync
。 - 确保尽可能多的安全,包括中毒策略和标记特性。
- 声明公共结构体
Mutex8
,它就像一组 8 个Mutex
实例,但放弃了中毒策略。可以同时获取一个Mutex8
实例的 2 个或更多锁。 - 与
std::sync
不同,公共结构体的构造函数是 const。例如,只要 T 可以静态构建,就可以声明静态Mutex<u64>
。
示例
声明 static spin_sync::Mutex<u64>
变量并从多线程中更新。这在 std::sync::Mutex
的情况下是不可能的。
extern crate spin_sync;
use spin_sync::Mutex;
use std::thread;
// Declare static mut Mutex<u64> variable.
static COUNT: Mutex<u64> = Mutex::new(0);
fn main() {
let num_thread = 10;
let mut handles = Vec::new();
// Create worker threads to inclement COUNT by 1.
for _ in 0..10 {
let handle = thread::spawn(move || {
let mut count = COUNT.lock().unwrap();
*count += 1;
});
handles.push(handle);
}
// Wait for all the workers.
for handle in handles {
handle.join().unwrap();
}
// Make sure the value is incremented by the worker count.
let count = COUNT.lock().unwrap();
assert_eq!(num_thread, *count);
}
许可协议:LGPL-3.0 或更高版本 OR Apache-2.0 OR BSD-2-Clause