我正在尝试在多个线程之间共享RwLock,而不使用scoped线程,但我无法弄清楚如何正确处理生命周期。我认为这是可能的(否则RwLock有什么意义呢?),但我找不到任何示例。
这里有一个玩具示例,我想要实现的内容。任何建议都将不胜感激。 此代码的Rust Playpen
这里有一个玩具示例,我想要实现的内容。任何建议都将不胜感激。 此代码的Rust Playpen
use std::sync::{Arc, RwLock};
use std::thread;
struct Stuff {
x: i32
}
fn main() {
let mut stuff = Stuff{x: 5};
helper(&mut stuff);
println!("done");
}
fn helper(stuff: &mut Stuff){
let rwlock = RwLock::new(stuff);
let arc = Arc::new(rwlock);
let local_arc = arc.clone();
for _ in 0..10{
let my_rwlock = arc.clone();
thread::spawn(move || {
let reader = my_rwlock.read().unwrap();
// do some stuff
});
}
let mut writer = local_arc.write().unwrap();
writer.x += 1;
}