1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年5月24日 |
---|
#18 in #thread-local-storage
121 每月下载
在 3 个 crate 中使用(通过 per-thread-object)
11KB
141 行
thread-local-object
每个对象的线程局部存储。
许可证
许可协议为以下之一:
- Apache 许可协议第 2.0 版(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则任何有意提交以包含在作品中的贡献(根据 Apache-2.0 许可协议定义),将如上所述双许可,不附加任何额外条款或条件。
lib.rs
:
每个对象的线程局部存储。
ThreadLocal
类型,为每个访问它的线程存储特定类型的(可空)值。
当线程退出时,线程的值会被销毁,但与 ThreadLocal
实例相关的值在它被丢弃时不会被销毁。这在某些方面与 thread_local
crate 提供的语义相反,其中当 ThreadLocal
对象被丢弃时值会被清理,但单个线程退出时不会。
因此,这个 crate 是适用于具有长期存在的 ThreadLocal
实例的场景,这些实例在程序运行期间广泛地在创建和销毁的线程之间共享,而 thread_local
crate 是适用于短期值。
示例
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));
依赖关系
~13KB