小编Pet*_*mps的帖子

模板中的thread_local可能存在clang编译错误

在我的项目中,我需要为数据成员的每个实例单独的线程本地存储.因为我在实现此功能时遇到了问题,所以我将代码的简化版本提取到以下C++ 14程序中:

#include <iostream>
#include <unordered_map>
#include <vector>

template<class T> class ThreadLocalMember
{
public:
    T& local() { return store.map[this]; }
private:
    struct Store
    {
        Store() { std::cout << "construct" << std::endl; }
        ~Store() { std::cout << "destruct" << std::endl; }
        std::unordered_map<ThreadLocalMember<T>*, T> map;
    };
    static thread_local Store store;
};

template <class T> thread_local typename ThreadLocalMember<T>::Store ThreadLocalMember<T>::store;

int main()
{
    ThreadLocalMember<int> counter;
    std::cout << "point 1" << std::endl;
    int result = counter.local();
    std::cout << "point 2; result: " << result << …
Run Code Online (Sandbox Code Playgroud)

c++ macos multithreading clang++ c++14

5
推荐指数
0
解决办法
270
查看次数

标签 统计

c++ ×1

c++14 ×1

clang++ ×1

macos ×1

multithreading ×1