在阅读 POSIX 线程时,我遇到了一个线程特定数据的示例。我确实有一个困惑的地方......
线程特定的数据接口(interface)看起来有点笨拙,尤其是当你混合使用 pthread_once、各种初始化程序等时。
有什么理由我不能只使用静态 std::map,其中键是 pthread_self() id,数据值保存在 std::pair 的第二部分?
我想不出只要它被包裹在互斥量中就无法工作的原因,但我没有看到任何关于它的建议或任何类似的东西让我感到困惑,因为它听起来比提供的 API 容易得多。我知道线程可能有很多 catch-22,所以我想我会问一下,看看我是否要介入……一些不愉快的事情? :)
最佳答案
I can't think of a reason that this wouldn't work as long as it was wrapped in a mutex
这本身就是一个很好的理由;如果实现得当,您可以访问您的线程特定数据,而不会阻止其他线程同时创建或访问它们的数据。
还有一般效率(恒定时间访问,如果使用 std::map
则为对数时间),不能保证 pthread_t
定义了合适的顺序,并且自动与所有其他线程资源一起清理。
您可以使用 C++11 的 thread_local
关键字,或 boost::thread_specific_ptr
,如果您不喜欢 Posix API。
关于c++ - 特定于线程的数据——为什么我不能只使用带有线程 ID 的静态映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8988253/