Замена заимствованной переменной
У меня есть ведро объектов, которые должны накапливать значения. Он защищенRwLock
и как таковой я также держу вокруг его блокировки записи. Я хочу сохранить одну блокировку записи на время процесса.
Например:
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);
}
}
В то время как мой пример работает с фиксированными данными, и поэтому, похоже, не нуждается вRwLock
вообще, реальный код будет входить в «реальный код» и не обязательно выходить на границеlocked
становится "полным".
Как мне создать новыйlocked
а такжеwriter
возражать когда нужно без заемщика-несогласного?