RPM build fix (reverted CI changes which will need to be un-reverted or made conditional) and vendor Rust dependencies to make builds much faster in any CI system.
This commit is contained in:
44
zeroidc/vendor/try-lock/README.md
vendored
Normal file
44
zeroidc/vendor/try-lock/README.md
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
# TryLock
|
||||
|
||||
- [Crates.io](https://crates.io/crates/try-lock)
|
||||
- [Docs](https://docs.rs/try-lock)
|
||||
|
||||
A light-weight lock guarded by an atomic boolean.
|
||||
|
||||
Most efficient when contention is low, acquiring the lock is a single atomic swap, and releasing it just 1 more atomic swap.
|
||||
|
||||
## Example
|
||||
|
||||
```rust
|
||||
use std::sync::Arc;
|
||||
use try_lock::TryLock;
|
||||
|
||||
// a thing we want to share
|
||||
struct Widget {
|
||||
name: String,
|
||||
}
|
||||
|
||||
// lock it up!
|
||||
let widget1 = Arc::new(TryLock::new(Widget {
|
||||
name: "Spanner".into(),
|
||||
}));
|
||||
|
||||
let widget2 = widget1.clone();
|
||||
|
||||
|
||||
// mutate the widget
|
||||
let mut locked = widget1.try_lock().expect("example isn't locked yet");
|
||||
locked.name.push_str(" Bundle");
|
||||
|
||||
// hands off, buddy
|
||||
let not_locked = widget2.try_lock();
|
||||
assert!(not_locked.is_none(), "widget1 has the lock");
|
||||
|
||||
// ok, you can have it
|
||||
drop(locked);
|
||||
|
||||
let locked2 = widget2.try_lock().expect("widget1 lock is released");
|
||||
|
||||
assert_eq!(locked2.name, "Spanner Bundle");
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user