色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

rust怎么做鎖

呂致盈2年前24瀏覽0評論

rust怎么做鎖?

這是官方給的例子,稍微修改了一下。

notify_one() 不會阻塞。

wait() 會阻塞。

use std::collections::HashMap;

use log::info;

fn main() {

use std::sync::{Arc, Mutex, Condvar};

use std::thread;

let pair = Arc::new((Mutex::new(false), Condvar::new()));

let pair2 = pair.clone();

thread::spawn(move || {

loop {

thread::sleep(std::time::Duration::from_secs(4));

let (lock, cvar) = &*pair2;

let mut started = lock.lock().unwrap();

//*started = true;

cvar.notify_all(); // 非阻塞通知,notify 有一個隊列,過多的通知會被拋棄。notify 以后,需要重新 lock() 才能繼續(xù) notify()

println!("notify_all()");

}

});

for i in 0..2 {

let pair2 = pair.clone();

thread::spawn(move || {

loop {

// 注意 lock 要及時釋放,否則會導致其他線程鎖住。

{

let (lock, cvar) = &*pair2;

let mut started = lock.lock().unwrap();

println!("waiting...{}", i);

let r = cvar.wait(started);

started = r.unwrap(); // wait() 會釋放掉 mutex lock!

println!("waked: {}", i);

// thread::sleep(std::time::Duration::from_secs(2)); // 這里會產(chǎn)生互斥,通知會被挨個執(zhí)行。

}

thread::sleep(std::time::Duration::from_secs(2)); // 由于互斥鎖在前面生命周期結(jié)束釋放,所以會兵法執(zhí)行到這里,看起來像是驚群。

}

});

}

thread::park();

}

java多線程lock,rust怎么做鎖