我有一堆需要累积值的对象。它受到RwLock
的保护,因此我也会保留它的写锁。我想在整个过程中保持一个写锁。替换借来的变量
例如:
use std::sync::RwLock;
fn main() {
let locked = RwLock::new(Vec::<u32>::new());
// this is the entry point for real-world code
let mut writer = locked.write().unwrap();
// copy into 'locked' until it is full (has 4 items)
for v in 0..100 {
if writer.len() > 4 {
// discard 'writer' and 'locked', create anew
locked = RwLock::new(Vec::<u32>::new());
writer = locked.write().unwrap();
}
writer.push(v);
}
}
虽然我的例子运行在固定数据,因此显得并不需要RwLock
可言,真正的代码将在“真正的代码”输入和边界不一定退出locked
成为“满”。
如何在需要时创建一个新的locked
和writer
对象,而不需借用检查器不同意?
我不明白为什么你必须放弃向量和它周围的锁。为什么不把它的大小更改为零以丢弃其中的所有数据? –
我看到您的免责声明,但我仍然不明白您的计划。如果您在整个程序期间持有作者锁定,则永远无法获得读取器锁定,因此实际上没有多线程的可能性...... – Shepmaster