5 个版本
0.1.4 | 2023 年 8 月 13 日 |
---|---|
0.1.3 | 2023 年 8 月 13 日 |
0.1.2 | 2020 年 4 月 18 日 |
0.1.1 | 2020 年 4 月 18 日 |
0.1.0 | 2020 年 4 月 17 日 |
128 在 Rust 模式 中
每月下载量 52,989
在 91 个crate(20 个直接) 中使用
32KB
533 行
scoped-tls-hkt
scoped-tls
的一个更灵活版本,允许以下附加功能
- 动态大小类型的引用存储。
- 可变引用存储。
- 包含未绑定生命周期参数(高阶类型)的类型存储。
- 以上功能的某些组合。
# Cargo.toml
[dependencies]
scoped-tls-hkt = "0.1"
作用域线程局部存储
程序中的每个线程都会有一个独立的线程局部变量。一个线程存储的值对其他线程不可见,反之亦然。
作用域线程局部存储通过在代码块进入时将新值存储到线程局部变量中,并在执行离开该块时恢复原始值来构建这个概念。
通过确保恢复原始值,即使代码块中发生恐慌,这也允许非静态数据(即具有生命周期的类型,如引用)在线程局部变量中临时(且安全)存储。
作用域 TLS 很有用,因为它允许程序深处的代码访问顶层设置的配置或其他上下文信息,而无需通过所有中间函数传递额外的参数。在某些情况下,例如库不提供传递额外数据的能力时,作用域 TLS 可能是唯一可行的选项。
然而,应该谨慎使用,因为这会使得理解和调试程序更困难。此外,TLS 的访问可能会对性能产生可衡量的影响,部分原因是某些平台没有 TLS 的有效实现,部分原因是 TLS 对编译器来说是不可见的,因此它通常会阻碍本应适用的编译器优化。
许可证
本项目受以下任一许可证的许可:
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任您选择。
贡献
除非您明确说明,否则您根据Apache-2.0许可证定义的,有意提交以包含在scoped-tls-hkt中的任何贡献,将按照上述方式双重授权,不附加任何额外条款或条件。