考虑以下测试用例:
#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库,所以这可以是一个透明的解决方案。