我需要一个线程本地变量,最好是存储在一个结构体中,该结构体当前存储了我的程序的大部分全局状态。
我能想到的第一种方法是使用 thread_local!
宏,但我希望将其保留在线程局部状态结构体中。
我能想到的第二种方法是在线程和线程本地变量值之间使用类似于 HashMap<Thread,MyThreadLocalData>
的结构。然后,我会使用 thread::current
进行查找适当的值。
我应该提到的最后一个要求是,给定程序中并非所有线程都是由 Rust 代码创建的,但 Rust 代码可以在任何线程上运行,因此解决方案应该具有鲁棒性。
是否有一种最佳实践的方法来做这件事?也许有一个 threadId
可以让我使用简单的 Vec
而不是 HashMap
,或避免哈希开销?是否有相应的库可用?
另一种选择是修改每个可能在多线程环境中使用的函数的参数,以接受状态结构体和线程本地状态结构体,但这不太容易与非由 Rust 创建的线程一起工作。