| commit | 480ed3e85bd87d00d1e0520949101f6d57532992 | [log] [tgz] |
|---|---|---|
| author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | Thu Sep 12 19:39:31 2024 +0000 |
| committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | Thu Sep 12 19:39:31 2024 +0000 |
| tree | 287a55864b4a330c7c3895ad87af3d92203d629f | |
| parent | 3ac062caeda859b28be0cefd854cb79a77a50edc [diff] | |
| parent | 6c31927a2ffc3320318b5f3ee7909d830262e693 [diff] |
Snap for 12359238 from 6c31927a2ffc3320318b5f3ee7909d830262e693 to android15-tests-release Change-Id: I64b599b6a0686f965152844fd8cee41d32ef082e
This library provides wrapper types that permit sending non Send types to other threads and use runtime checks to ensure safety.
It provides the Fragile<T>, Sticky<T> and SemiSticky<T> types which are similar in nature but have different behaviors with regards to how destructors are executed. The Fragile<T> will panic if the destructor is called in another thread, Sticky<T> will temporarily leak the object until the thread shuts down. SemiSticky<T> is a compromise of the two. It behaves like Sticky<T> but it avoids the use of thread local storage if the type does not need Drop.
use std::thread; // creating and using a fragile object in the same thread works let val = Fragile::new(true); assert_eq!(*val.get(), true); assert!(val.try_get().is_ok()); // once send to another thread it stops working thread::spawn(move || { assert!(val.try_get().is_err()); }).join() .unwrap();