替换借来的变量

时间:2016-08-04 20:09:31

标签: rust

我有一堆需要累积值的对象。它受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的边界“满”。

如果没有借用检查器不同意,如何在需要时创建新的lockedwriter对象?

1 个答案:

答案 0 :(得分:2)

我同意with David Grayson,没有明显需要重新创建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