#thread #mutex #lock #shared-data #access #owning

无 std thread-owned-lock

只能由拥有线程解锁的互斥锁

1 个不稳定版本

0.1.0 2024 年 3 月 6 日

#1034 in 并发

MIT 许可证

14KB
182

线程拥有锁

这个 crate 提供了一个与 Mutex 类似的并发原语,但只允许当前绑定的线程访问其内容。与 Mutex 不同,它不会因为其他线程已获取锁而使线程阻塞,但操作将立即失败。

该原语还确保拥有线程只能获取一次锁,以避免破坏 Rust 的别名规则。

使用场景

这个并发原语用于强制确保只有特定线程可以访问数据。根据您的操作系统,它可能比常规的 Mutex 更快。您可以通过运行此 crate 的基准测试来检查它在您的机器上的表现。

示例

use std::sync::RwLock;
use thread_owned_lock::StdThreadOwnedLock;

struct SharedData {
    main_thread_data: StdThreadOwnedLock<i32>,
    shared_data: RwLock<i32>,
}

let shared_data = std::sync::Arc::new(SharedData {
    main_thread_data: StdThreadOwnedLock::new(20),
    shared_data:RwLock::new(30)
});
{
    let guard = shared_data.main_thread_data.lock();
    // Main thread can now access the contents;
}
let data_cloned = shared_data.clone();
std::thread::spawn(move|| {
    if let Err(e) = data_cloned.main_thread_data.try_lock() {
        // On other threads, accessing the main thread data will fail.
    }
});

无运行时依赖