我有一桶需要积累价值的对象。它受到保护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
and writer
需要时提出反对,而借用检查员不同意?
I agree 与大卫·格雷森,没有明显的需要重新创建RwLock
。假设您在填充后需要向量,请使用mem::replace
关闭Vec
:
use std::sync::RwLock;
use std::mem;
fn main() {
let locked = RwLock::new(Vec::<u32>::new());
let mut writer = locked.write().unwrap();
for v in 0..100 {
if writer.len() > 4 {
let old_vec = mem::replace(&mut *writer, Vec::new());
}
writer.push(v);
}
}
如果您不需要Vec
,然后只需调用Vec::clear.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)