| Crates.io | bastion-qutex |
| lib.rs | bastion-qutex |
| version | 0.2.4 |
| created_at | 2019-11-13 13:07:35.440097+00 |
| updated_at | 2019-11-13 13:11:20.552308+00 |
| description | Synchronization mechanisms that rely on lock-free and other non-(thread)blocking techniques, such as Rust futures, to guarantee mutually exclusive or shared exclusive access to data. |
| homepage | https://github.com/cogciprocate/qutex |
| repository | https://github.com/cogciprocate/qutex |
| max_upload_size | |
| id | 180960 |
| size | 72,677 |
Non-thread-blocking queue-backed data locks based on Rust futures.
Includes futures capable versions of Mutex and RwLock.
Cargo.toml:
[dependencies]
qutex = "0.2"
main.rs:
extern crate qutex;
extern crate futures;
use std::thread;
use futures::Future;
use qutex::Qutex;
fn main() {
let thread_count = 100;
let mut threads = Vec::with_capacity(thread_count);
let start_val = 0;
let qutex = Qutex::new(start_val);
for _ in 0..thread_count {
let future_val = qutex.clone().lock();
let future_add = future_val.map(|mut val| {
*val += 1;
});
threads.push(thread::spawn(|| {
future_add.wait().unwrap();
}));
}
for thread in threads {
thread.join().unwrap();
}
let val = qutex.lock().wait().unwrap();
assert_eq!(*val, start_val + thread_count);
println!("Qutex final value: {}", *val);
}