commit | 6c31927a2ffc3320318b5f3ee7909d830262e693 | [log] [tgz] |
---|---|---|
author | Xin Li <[email protected]> | Tue Jun 18 11:43:35 2024 -0700 |
committer | Xin Li <[email protected]> | Tue Jun 18 11:43:35 2024 -0700 |
tree | 287a55864b4a330c7c3895ad87af3d92203d629f | |
parent | 1cdaa5300509087a49f5a73c22136f7ce154b094 [diff] | |
parent | 26e8daaaf279e05da2c077d7009f64c1747a0ed5 [diff] |
Mark ab/11976889 as merged in aosp-main-future Bug: 347831320 Merged-In: I40c4b46611aeff71366e4ad6fe2db303cdb1f598 Change-Id: Ib3dbcfa76b11819b024001de11603c902358511f
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();