tree: cb5fc2c81423cd998db4563718584f6fa479216d [path history] [tgz]
  1. .github/
  2. examples/
  3. src/
  4. .cargo-checksum.json
  5. .cargo_vcs_info.json
  6. BUILD.bazel
  7. Cargo.lock
  8. Cargo.toml
  9. Cargo.toml.orig
  10. CHANGELOG.md
  11. LICENSE
  12. Makefile
  13. README.md
third_party/rust_crates/vendor/fragile-2.0.1/README.md

Fragile

Crates.io License Documentation

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