#自旋锁 #同步原语 #互斥锁 #同步 # #自旋

spin-sync

使用自旋锁的同步原语。接口类似于 std::sync。公共结构体的构造函数是 const;即只要 T 可以静态构建,就可以声明静态 Mutex

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

LGPL-3.0-or-later OR Apache-2…

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 和更多

Build Status Build Status

spin-sync

CircleCI Build Status

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

无运行时依赖