Fragile
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
.
Example
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();
License and Links
- Documentation
- Issue Tracker
- License: Apache 2.0