# Soft fork: TryLock with Portable Atomics
This repository and the crate try-lock-portable-atomics is a soft fork of the [try-lock](https://github.com/seanmonstar/try-lock) crate.
This fork *only* applies [PR #11](https://github.com/seanmonstar/try-lock/pull/11) and the necessary metadata changes;
otherwise, it tracks upstream 1:1.
Original README below.
---
# 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");
```