1 个不稳定版本
0.1.0 | 2022年11月26日 |
---|
#1148 在 并发 中
7KB
117 行
optimistic-cell
一个高度缓存高效的锁-like 容器,用于处理可能以乐观方式读取且不修改任何缓存行的并发数据。
由于读取可能会访问与写入发生冲突的数据,并且仅在之后进行验证,因此只有标记为 Copy
的项可以乐观地读取。
写保护本质上只是一个普通的自旋锁。
let n: u32 = 128 * 1024 * 1024;
let concurrency = 4;
let cell = &OptimisticCell::new(0);
let barrier = &std::sync::Barrier::new(concurrency as _);
let before = std::time::Instant::now();
std::thread::scope(|s| {
let mut threads = vec![];
for _ in 0..concurrency {
let thread = s.spawn(move || {
barrier.wait();
for _ in 0..n {
let read_1 = cell.read();
let mut lock = cell.lock();
*lock += 1;
drop(lock);
let read_2 = cell.read();
assert_ne!(read_1, read_2);
}
});
threads.push(thread);
}
for thread in threads {
thread.join().unwrap();
}
});
dbg!(before.elapsed());
工作负载的可扩展性高度依赖于写入的频率以及写入者可以在释放锁之前保持单元格锁定的时间。