Ersetzen einer ausgeliehenen Variablen
Ich habe einen Eimer mit Objekten, die Werte akkumulieren müssen. Es ist durch ein @ geschütRwLock
, und als solches behalte ich auch seine Schreibsperre. Ich möchte eine einzelne Schreibsperre für die Dauer des Vorgangs beibehalten.
Beispielsweise
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);
}
}
Während mein Beispiel mit festen Daten arbeitet, scheint das @ nicht erforderlich zu seiRwLock
überhaupt würde der reale Code bei "real code" eingeben und nicht unbedingt an der Grenze von @ verlasslocked
wird "voll".
Wie erstelle ich ein neueslocked
undwriter
Objekt bei Bedarf, ohne dass der Leihprüfer anderer Meinung ist?