我不确定为什么它会挂在my.rw.write();
上。
如果您取消对sleep
调用的注释,则可以正常使用。这意味着在执行派生线程并释放rwlock
之后,写访问尝试仍将阻塞主线程。我认为理论上一定很好。我在哪里错了?
use std::sync::Arc;
use std::sync::rwlock;
use std::{thread,time};
struct MySt {
num1: i64,num2: i64,rw: rwlock<Vec<i64>>,}
fn main() {
let my = Arc::new(MySt {
num1: 32,num2: 64,rw: rwlock::new(vec![1,2,3]),});
let my2 = my.clone();
let t = thread::spawn(move || {
let mut rw = my2.rw.write().unwrap();
rw[0] = 5;
println!("child thread {},{},{}",my2.num1,my2.num2,rw[0],rw[1]);
});
//thread::sleep(time::Duration::from_millis(1000));
let mut rw = my.rw.write().unwrap();
rw[1] = 6;
println!("main thread {},my.num1,my.num2,rw[1]);
t.join().unwrap();
}