Reemplazar una variable prestada
Tengo un cubo de objetos que necesitan acumular valores. Está protegido por unRwLock
, y como tal también mantengo alrededor de su bloqueo de escritura. Quiero mantener un solo bloqueo de escritura durante todo el proceso.
Por ejemplo:
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);
}
}
Si bien mi ejemplo funciona con datos fijos, parece que no necesita elRwLock
en absoluto, el código real entraría en "código real" y no necesariamente saldría en el límite delocked
volviéndose "lleno".
¿Cómo creo un nuevolocked
ywriter
objetar cuando sea necesario sin que el verificador de préstamos no esté de acuerdo?