1 个不稳定版本
0.1.0 | 2024 年 3 月 6 日 |
---|
#1034 in 并发
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.
}
});