Crates.io | fragile |
lib.rs | fragile |
version | |
source | src |
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 |
Cargo.toml error: | TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
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();