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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta