4个版本
0.1.2 | 2023年2月19日 |
---|---|
0.1.1 | 2023年2月2日 |
0.1.0 | 2023年1月31日 |
0.0.1 | 2023年1月31日 |
在并发类别中排名第1051
34KB
632 行
该Crates提供顺序锁定的环形缓冲区。它允许快速且非写入者阻塞的SPMC队列,其中所有消费者都读取所有消息。
原文
这是sling Crates的Rust封装的Zig版本。请注意,由于当前实现中的限制,缓冲区大小设置为256,消息设置为[u8; 8]。
用法
有两种从队列中消费的方式。如果线程通过共享引用共享一个SharedReader
,它们将相互窃取队列项目,这样就没有两个线程会读取相同的消息。当SharedReader
被克隆时,新的SharedReader
的读取进度将不再影响另一个。如果两个线程各自使用一个单独的SharedReader
,它们将能够读取相同的消息。
# use zsling::*;
let buffer = RingBuffer::new();
let mut writer = buffer.try_lock().unwrap();
let mut reader = buffer.reader();
std::thread::scope(|s| {
let reader = &reader;
for t in 0..8 {
s.spawn(move || {
for _ in 0..100 {
if let Some(val) = reader.pop_front() {
println!("t: {}, val: {:?}", t, val);
};
}
});
}
for i in 0..100 {
writer.push_back([0, 1, 2, 3, 4, 5, 6, 7]);
}
});
重要!
还应注意,如果慢速读者没有足够快地消费消息,它们将被写者超过。如果缓冲区大小不够大,这种情况可能会很频繁。建议根据具体情况进行测试,找到最适合您用例的缓冲区大小。
依赖项
~93KB