| commit | 255f3132850e954bdc335590b04a75a80db72d52 | [log] [tgz] |
|---|---|---|
| author | Android Build Coastguard Worker <[email protected]> | Thu Aug 08 01:16:39 2024 +0000 |
| committer | Android Build Coastguard Worker <[email protected]> | Thu Aug 08 01:16:39 2024 +0000 |
| tree | 390093eaebf03f98d103d09bc99d59921080ece3 | |
| parent | 50761b9e2a2f3cd1aa05daf640a0117f7223bf30 [diff] | |
| parent | 689215b36e63a9f2357ff819299e0bcbd1afff3b [diff] |
Snap for 12199801 from 689215b36e63a9f2357ff819299e0bcbd1afff3b to 25D4-release Change-Id: I9788e951988d470703804a2d8643e26b51242f88
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.
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");