commit | b4e81462da861f8f88ce336e2dd4c3d0822cf080 | [log] [tgz] |
---|---|---|
author | James Farrell <[email protected]> | Tue Aug 27 13:31:46 2024 +0000 |
committer | James Farrell <[email protected]> | Tue Aug 27 13:31:46 2024 +0000 |
tree | a83b84f512dd9ddd21a10fb5eab2bb705749ea9d | |
parent | 5990190eb41f51f8513d57cb2c23693158bae84b [diff] |
Migrate 25 crates to monorepo. env_logger epoll errno fallible-iterator fallible-streaming-iterator fastrand flagset fragile fs-err futures futures-core futures-executor futures-io futures-macro futures-sink futures-task futures-test futures-util gbm getrandom glob googletest googletest_macro h2 hashbrown Bug: 339424309 Test: treehugger Change-Id: Iecbac08ec75f6c67dbf554aa10f385155ec32dd1
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();