Substituindo uma variável emprestada
Eu tenho um balde de objetos que precisam acumular valores. Está protegido por umRwLock
e, como tal, também mantenho o bloqueio de gravação. Quero manter um único bloqueio de gravação durante o processo.
Por exemplo:
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);
}
}
Enquanto meu exemplo opera com dados fixos, parece não precisar doRwLock
de qualquer forma, o código real entraria em "código real" e não necessariamente sairia no limite delocked
ficando "cheio".
Como crio um novolocked
ewriter
quando necessário sem que o verificador emprestado discorde?