Crates.io | sync-wait-object |
lib.rs | sync-wait-object |
version | 0.2.0 |
source | src |
created_at | 2023-01-20 12:21:58.641444 |
updated_at | 2023-01-22 14:00:40.712369 |
description | Synchronous Wait Object (abstraction over Mutex & CondVar) |
homepage | https://docs.rs/sync-wait-object |
repository | https://github.com/ruxo/sync-wait-object |
max_upload_size | |
id | 763344 |
size | 19,636 |
Provide an abstraction over Condvar
+ Mutex
usage, as provided by the Rust document
in Condvar.
The library provides three main types: WaitEvent
, ManualResetEvent
, and AutoResetEvent
. WaitEvent
is the core
abstraction mentioned. ManualResetEvent
and AutoResetEvent
are just a specialization for bool
type.
When compiling with Windows platform, the lib also provides windows
module for native implementation of
ManualResetEvent
and AutoResetEvent
.
Example of the abstraction provided:
use sync_wait_object::WaitEvent;
use std::thread;
let wait3 = WaitEvent::new_init(0);
let mut wait_handle = wait3.clone();
thread::spawn(move || {
for i in 1..=3 {
wait_handle.set_state(i).unwrap();
}
});
let timeout = std::time::Duration::from_secs(1);
let r#final = *wait3.wait(Some(timeout), |i| *i == 3).unwrap();
let current = *wait3.value().unwrap();
assert_eq!(r#final, 3);
assert_eq!(current, 3);
The second is to wait and then reset the value to a desired state.
use sync_wait_object::WaitEvent;
use std::thread;
let wait3 = WaitEvent::new_init(0);
let mut wait_handle = wait3.clone();
thread::spawn(move || {
for i in 1..=3 {
wait_handle.set_state(i).unwrap();
}
});
let timeout = std::time::Duration::from_secs(1);
let r#final = wait3.wait_reset(Some(timeout), || 1, |i| *i == 3).unwrap();
let current = *wait3.value().unwrap();
assert_eq!(r#final, 3);
assert_eq!(current, 1);