gpt4 book ai didi

c++ - 有什么方法可以使用 GCC 的 __thread 完全模拟 thread_local 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:36 25 4
gpt4 key购买 nike

C++11 标准包含一个新的附加项——thread_local 说明符——它使静态变量成为线程局部的。标准的 thread_local 支持非平凡的类型——那些具有构造函数和析构函数的类型。遗憾的是,GCC 通过作为扩展提供的 __thread 说明符仅支持普通类型。有没有办法在 __thread 之上模拟 thread_local__thread 的实现非常快(相当于常规变量加两个间接寻址),所以我想避免热路径中的库函数。

我正在使用 GCC 和 Linux。不需要便携性。

最佳答案

没有。

gcc 目前没有能力在线程创建/销毁时为 __thread 东西运行 ctor/dtor,所以除非你不需要 ctor/dtor 来运行(在这种情况下 __thread 正是你所需要的,没有什么可以模拟的最重要的是),还没有像 thread_local 这样的东西。

但是,如果您可以接受惰性初始化(例如__thread T* ptr; if(!ptr){...}),您可以使用pthread_key_create 破解一些东西您可以在其中注册一个将在线程销毁时运行的销毁函数,然后您可以在那里注册所有指针。

或者您可以使用 boost::thread_specific_ptr 或多或少地执行此操作(可能不使用 __thread TLS 作为底层实现细节)

关于c++ - 有什么方法可以使用 GCC 的 __thread 完全模拟 thread_local 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063073/

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