1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年5月24日

#18 in #thread-local-storage

Download history 34/week @ 2024-03-04 29/week @ 2024-03-11 48/week @ 2024-03-18 42/week @ 2024-03-25 82/week @ 2024-04-01 4/week @ 2024-04-08 26/week @ 2024-04-15 30/week @ 2024-04-22 32/week @ 2024-04-29 18/week @ 2024-05-06 24/week @ 2024-05-13 33/week @ 2024-05-20 18/week @ 2024-05-27 13/week @ 2024-06-03 66/week @ 2024-06-10 23/week @ 2024-06-17

121 每月下载
3 个 crate 中使用(通过 per-thread-object

MIT/Apache

11KB
141

thread-local-object

Build Status

文档

每个对象的线程局部存储。

许可证

许可协议为以下之一:

任选其一。

贡献

除非您明确声明,否则任何有意提交以包含在作品中的贡献(根据 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