我有一堆需要累積值的對象。它受到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
對象,而不需借用檢查器不同意?
我不明白爲什麼你必須放棄向量和它周圍的鎖。爲什麼不把它的大小更改爲零以丟棄其中的所有數據? –
我看到您的免責聲明,但我仍然不明白您的計劃。如果您在整個程序期間持有作者鎖定,則永遠無法獲得讀取器鎖定,因此實際上沒有多線程的可能性...... – Shepmaster