6 个版本
0.0.6 | 2024年2月13日 |
---|---|
0.0.5 | 2024年1月27日 |
0.0.4 | 2023年11月28日 |
0.0.2 | 2023年10月1日 |
0.0.1 | 2023年9月28日 |
#144 in 内存管理
61KB
970 行
hzrd
通过利用危险指针提供共享、可变状态。
该 crate 的核心概念是内存换速度。容器避免锁定值,而是积累垃圾:以后需要释放的额外数据。垃圾回收通过危险指针控制。每个值的读取者可以持有该值的一个引用。如果容器中的值被交换,则他们持有的引用通过其危险指针保持有效。然后(在某个时间点)他们可以取消引用,值将在某个时间点被清理 。
HzrdCell
HzrdCell 旨在提供类似于 std 的 Cell 类型的多线程版本。一个基本示例
use hzrd::HzrdCell;
let cell = HzrdCell::new(false);
std::thread::scope(|s| {
s.spawn(|| {
// Loop until the value is true
while !cell.get() {
std::hint::spin_loop();
}
// And then set it back to false!
cell.set(false);
});
s.spawn(|| {
// Set the value to true
cell.set(true);
// And then read the value!
// This might print either `true` or `false`
println!("{}", cell.get());
});
});
HzrdCell 提供内存安全、多线程、共享可变。但这并不是很有用。我们通常需要某种同步来避免竞争(不是数据竞争,而是一般的竞争)。