Macro std::thread_local
1.0.0 · source · macro_rules! thread_local { () => { ... }; ($(#[$attr:meta])* $vis:vis static $name:ident: $t:ty = const { $init:expr }; $($rest:tt)*) => { ... }; ($(#[$attr:meta])* $vis:vis static $name:ident: $t:ty = const { $init:expr }) => { ... }; ($(#[$attr:meta])* $vis:vis static $name:ident: $t:ty = $init:expr; $($rest:tt)*) => { ... }; ($(#[$attr:meta])* $vis:vis static $name:ident: $t:ty = $init:expr) => { ... }; }
Expand description
声明一个新的 std::thread::LocalKey
类型的线程本地存储密钥。
Syntax
宏可以包装任意数量的静态声明,并使它们成为局部线程。 允许每个静态的公开和属性。Example:
use std::cell::RefCell;
thread_local! {
pub static FOO: RefCell<u32> = RefCell::new(1);
static BAR: RefCell<f32> = RefCell::new(1.0);
}
FOO.with(|foo| assert_eq!(*foo.borrow(), 1));
BAR.with(|bar| assert_eq!(*bar.borrow(), 1.0));
Run此宏支持特殊的 const {}
语法,当初始化表达式可以被评估为常量时可以使用该语法。
这可以启用可以避免延迟初始化的更高效的线程本地实现。
对于不是 need to be dropped 的类型,这可以实现更高效的实现,无需跟踪任何其他状态。
use std::cell::Cell;
thread_local! {
pub static FOO: Cell<u32> = const { Cell::new(1) };
}
FOO.with(|foo| assert_eq!(foo.get(), 1));
Run有关更多信息,请参见 LocalKey
文档。