4 个版本

使用旧的 Rust 2015

0.1.1 2016年6月12日
0.1.0 2016年5月12日
0.0.5 2016年5月11日
0.0.1 2016年5月9日

#875 in 并发


用于 valid_toml

AML/Apache-2.0

68KB
1.5K SLoC

shareable

此 crate 允许通过原子内存操作共享各种数据对象,以尽可能避免使用 Mutex 的开销。SharedF32、SharedI8、SharedI16、SharedI32、SharedIsize、SharedU8、SharedU16、SharedU32 和 SharedUsize 对象基本上只是将数据传递给原子元素。

SharedF64、SharedI64 和 SharedU64 对象在支持 32 位和 64 位环境时很有用。在 64 位环境中,它们将使用更快的原子数据对象来共享值,在 32 位编译时,由于原子操作只处理 32 位值,它们将使用较慢的互斥锁。

SharedObject 将共享一个只读对象。内部使用一个非常小的自旋锁来确保精确的引用计数,但应该提供比使用 Mutex 更快的访问速度。

示例

use std::sync::mpsc;
use std::thread;
use shareable::SharedObject;

let value1 = SharedObject::new(String::from("abc"));
let value2 = value1.clone();

let (tx, rx) = mpsc::channel();

let thread = thread::spawn(move || {
    rx.recv();
    assert_eq!(value2.get().as_str(), "xyz");
});

value1.set(String::from("xyz"));

tx.send(());
thread.join().unwrap();

无运行时依赖项