| Crates.io | fragile |
| lib.rs | fragile |
| version | 2.0.1 |
| created_at | 2018-06-20 23:57:55.033266+00 |
| updated_at | 2025-03-25 12:01:07.715153+00 |
| description | Provides wrapper types for sending non-send values to other threads. |
| homepage | https://github.com/mitsuhiko/fragile |
| repository | https://github.com/mitsuhiko/fragile |
| max_upload_size | |
| id | 71014 |
| size | 59,627 |
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();