Queued rwlock implementation in Rust

This read-write lock uses ticket mutex as waitqueue, which acts like FIFO. It allows to avoid unfairness and starvation of readers or writes, that is common problem for generic rwlocks (read-preffered or write-preffered)

Example

```rust extern crate qrwlock; use std::{sync::Arc, thread};

fn main() { let counter = Arc::new(qrwlock::RwLock::new(0));

let thread = thread::spawn({
    let counter = counter.clone();
    move || {
        for _ in 0..1000 {
            *counter.write() += 1;
        }
    }
});

for _ in 0..1000 {
    println!("read {}", *counter.read());
}

thread.join().unwrap();

assert_eq!(*counter.read(), 1000);

} ```

License

qrwlock is distributed under the MIT License, (See LICENSE).