commit | 47a150afd662eabdecbd7b9069c5f90e800b9c99 | [log] [tgz] |
---|---|---|
author | Android Build Coastguard Worker <[email protected]> | Thu Aug 08 01:13:58 2024 +0000 |
committer | Android Build Coastguard Worker <[email protected]> | Thu Aug 08 01:13:58 2024 +0000 |
tree | a45931d72bea90fd4009a47259f679b40875f038 | |
parent | e14b43c4f1c44c37ec7747f0c411f3acf7a3aae3 [diff] | |
parent | 62ca06567b109d5d79e4a5d7deb70ac85b4cb10f [diff] |
Snap for 12199801 from 62ca06567b109d5d79e4a5d7deb70ac85b4cb10f to 25D4-release Change-Id: I47ef627db88b4381e15788f9041a61016138dfd7
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();