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)
11KB
141 lines
thread-local-object
Per-object thread local storage.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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