Files
rust/library/std/src
Aleksey Kladov d94b4e81e4 clarify RW lock's priority gotcha
In particular, the following program works on Linux, but deadlocks on
mac:

    use std::{
        sync::{Arc, RwLock},
        thread,
        time::Duration,
    };

    fn main() {
        let lock = Arc::new(RwLock::new(()));

        let r1 = thread::spawn({
            let lock = Arc::clone(&lock);
            move || {
                let _rg = lock.read();
                eprintln!("r1/1");
                sleep(1000);

                let _rg = lock.read();
                eprintln!("r1/2");

                sleep(5000);
            }
        });
        sleep(100);
        let w = thread::spawn({
            let lock = Arc::clone(&lock);
            move || {
                let _wg = lock.write();
                eprintln!("w");
            }
        });
        sleep(100);
        let r2 = thread::spawn({
            let lock = Arc::clone(&lock);
            move || {
                let _rg = lock.read();
                eprintln!("r2");
                sleep(2000);
            }
        });

        r1.join().unwrap();
        r2.join().unwrap();
        w.join().unwrap();
    }

    fn sleep(ms: u64) {
        std:🧵:sleep(Duration::from_millis(ms))
    }
2021-02-27 19:21:50 +03:00
..
2021-02-06 13:05:56 +01:00
2020-11-07 16:15:48 +01:00
2021-02-27 19:21:50 +03:00
2020-10-21 20:44:03 -07:00
2021-01-07 09:13:21 +01:00
2020-09-02 17:37:40 -04:00
2021-01-23 11:56:33 -06:00
2021-02-22 12:49:42 +00:00
2021-01-31 11:07:37 +01:00
2021-02-23 15:54:55 +01:00
2021-02-13 16:59:06 +01:00
2020-11-22 17:11:41 -05:00