4个版本
0.2.2 | 2023年1月3日 |
---|---|
0.2.1 | 2023年1月3日 |
0.2.0 | 2023年1月3日 |
0.1.0 | 2023年1月2日 |
#548 in Unix API
18KB
182 代码行数,不包括注释
Process Sync
添加可在多个进程间共享的同步原语
共享内存
let mut shared = SharedMemoryObject::new(123)?;
let pid = unsafe { fork() };
assert!(pid >= 0);
if pid == 0 {
assert_eq!(*shared.get(), 123);
*shared.get_mut() = 456;
sleep(Duration::from_millis(40));
assert_eq!(*shared.get(), 789);
} else {
sleep(Duration::from_millis(20));
assert_eq!(*shared.get(), 456);
*shared.get_mut() = 789;
}
互斥锁
let mut mutex = SharedMutex::new()?;
let pid = unsafe { fork() };
assert!(pid >= 0);
if pid == 0 {
println!("child lock()");
mutex.lock()?;
println!("child locked");
sleep(Duration::from_millis(40));
println!("child unlock()");
mutex.unlock()?;
} else {
sleep(Duration::from_millis(20));
println!("parent lock()");
mutex.lock()?;
println!("parent locked");
sleep(Duration::from_millis(20));
println!("parent unlock()");
mutex.unlock()?;
}
条件变量
let mut mutex = SharedMutex::new()?;
let mut condvar = SharedCondvar::new()?;
let pid = unsafe { fork() };
assert!(pid >= 0);
if pid == 0 {
println!("child lock()");
mutex.lock()?;
println!("child wait()");
condvar.wait(&mut mutex)?;
println!("child notified");
mutex.unlock()?;
println!("child unlocked");
} else {
sleep(Duration::from_millis(40));
println!("parent notify()");
condvar.notify_one()?;
}
依赖项
~43KB