tree: 7a139248e1a598e71cef852689644b81f8511baa [path history] [tgz]
  1. examples/
  2. src/
  3. .android-checksum.json
  4. .cargo-checksum.json
  5. Android.bp
  6. Cargo.lock
  7. Cargo.toml
  8. cargo_embargo.json
  9. CHANGELOG.md
  10. LICENSE
  11. Makefile
  12. METADATA
  13. MODULE_LICENSE_APACHE2
  14. README.md
  15. TEST_MAPPING
crates/fragile/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