#thread-local #global-allocator #tls #safe #dynamic #loaded #mac

nightly alloc-tls

适用于实现全局分配器的安全线程本地存储

2个不稳定版本

使用旧的Rust 2015

0.2.0 2020年4月4日
0.1.0 2017年11月16日

#322 in 操作系统

Apache-2.0/MIT

43KB
624

alloc-tls

alloc-tls 提供了 alloc_thread_local! 宏,这是标准库中 thread_local! 宏的一个近似直接替代品,适用于在实现全局分配器时使用。

thread_local! 不同,alloc_thread_local! 解决了实现全局分配器时特有的以下问题

  • 在支持 #[thread_local] 属性的平台,注册实现 Drop 的类型的析构函数需要分配。当一个线程本地变量从调用分配函数(如 mallocfree 等)初始化时,这会导致重入性。 alloc_thread_local! 可以检测到这一点。
  • 在Mac上,在动态库加载时访问TLS是不安全的。在实现提供全局分配器的Mac动态库时,alloc_thread_local! 可以检测库是否已加载,如果在加载过程中加载器本身调用了 malloc 或其他类似调用,则可以避免使用TLS。

已知限制

  • alloc-tls 目前不支持不支持 #[thread_local] 属性的平台。

依赖项

~200KB