gpt4 book ai didi

c++ - 特定于线程的数据——为什么我不能只使用带有线程 ID 的静态映射?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:44 27 4
gpt4 key购买 nike

在阅读 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com