Substituindo uma variável emprestada

Eu tenho um balde de objetos que precisam acumular valores. Está protegido por umRwLocke, 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&nbsp;de qualquer forma, o código real entraria em "código real" e não necessariamente sairia no limite delocked&nbsp;ficando "cheio".

Como crio um novolocked&nbsp;ewriter&nbsp;quando necessário sem que o verificador emprestado discorde?