1 unstable release

Uses old Rust 2015

0.1.0 May 24, 2017

#21 in #thread-local-storage

37 downloads per month
Used in 3 crates (via per-thread-object)

MIT/Apache

11KB
141 lines

thread-local-object

Build Status

Documentation

Per-object thread local storage.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


lib.rs:

Per-object thread local storage.

The ThreadLocal type which stores a distinct (nullable) value of some type for each thread that accesses it.

A thread's values are destroyed when it exits, but the values associated with a ThreadLocal instance are not destroyed when it is dropped. These are in some ways the opposite semantics of those provided by the thread_local crate, where values are cleaned up when a ThreadLocal object is dropped, but not when individual threads exit.

Because of this, this crate is an appropriate choice for use cases where you have long lived ThreadLocal instances which are widely shared among threads that are created and destroyed through the runtime of a program, while the thread_local crate is an appropriate choice for short lived values.

Examples

use std::sync::Arc;
use std::thread;
use thread_local_object::ThreadLocal;

let tls = Arc::new(ThreadLocal::new());

tls.set(1);

let tls2 = tls.clone();
thread::spawn(move || {
    // the other thread doesn't see the 1
    assert_eq!(tls2.get_cloned(), None);
    tls2.set(2);
}).join().unwrap();

// we still see our original value
assert_eq!(tls.get_cloned(), Some(1));

Dependencies

~13KB