这是保证thread_local初始化的有效方法吗?

时间:2018-02-07 18:42:56

标签: c++ c++11 thread-local-storage

考虑以下测试用例:

#include <iostream>
#include <thread>

thread_local struct Bar
{
     Bar() { std::cout << '*' << std::endl; }
    ~Bar() { std::cout << '~' << std::endl; }
} bar;

struct Foo
{
    void baz()
    {
        (void)&bar;
    }
};

int main()
{
    Foo f;
    f.baz();

    std::thread t(&Foo::baz, &f);
    t.join();
}

On Coliru它按照我的意图工作,看似无用的语句(void)&bar显然算作“使用”并确保bar在任何调用baz()的线程中构造

这是保证,还是我应该做更多的事情?

我希望使用像Bar这样的类来包装我将要使用的C库所需的每线程初始化,并使用最少的样板。 baz()已经是一个函数,任何线程都会调用它来处理C库,所以这可以是一个透明的解决方案。

0 个答案:

没有答案