Crates.io | bastion-qutex |
lib.rs | bastion-qutex |
version | 0.2.4 |
source | src |
created_at | 2019-11-13 13:07:35.440097 |
updated_at | 2019-11-13 13:11:20.552308 |
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);
}