Migrate 26 crates to monorepo am: e3a74b5a3c am: a49aba6865

Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/try-lock/+/3272314

Change-Id: Ifdc52a238e3d080e897fc7655a5ec51538fbe38a
Signed-off-by: Automerger Merge Worker <[email protected]>
tree: bd7116c534d29fd5c9137e2ee96c318b196f9131
  1. patches/
  2. src/
  3. Android.bp
  4. Cargo.toml
  5. Cargo.toml.orig
  6. LICENSE
  7. METADATA
  8. MODULE_LICENSE_MIT
  9. OWNERS
  10. README.md
README.md

TryLock

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

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");