私は値を累積する必要があるオブジェクトのバケットを持っています。それはRwLock
によって保護されているので、私はその書き込みロックを守っています。私はプロセスの持続時間の間、単一の書き込みロックを保持したい。例えば借用した変数を置換する
:私の例では、固定データを上の動作、およびそのすべてで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);
}
}
すると、実際のコードは、「実際のコード」との境界に必ずしも出口で入力します。 locked
が「フル」になっています。
借用チェッカーが不一致でなくても、必要なときに新しいlocked
オブジェクトとwriter
オブジェクトを作成するにはどうすればよいですか?
なぜ、ベクターとその周囲のロックを破棄しなければならないのかわかりません。その中のすべてのデータを破棄するためにサイズをゼロに変更するだけではどうですか? –
免責事項がありますが、私はまだあなたのプログラムを理解していません。あなたがプログラム全体の持続時間の間にライターロックを保持していれば、リーダーロックは決して得られないので、実際にはマルチスレッドの可能性はありません。 – Shepmaster