1
여기 내 테스트 코드입니다 :thread_local 및 std :: future 객체 - 객체의 수명은 어떻게됩니까?
vector<int> const & foo(int const counter)
{
thread_local static vector<int> v{counter, counter + 1, counter + 2};
return v;
}
int main()
{
using myFut = future<vector<int> const &>;
vector<myFut> futures;
for(int i{0}; i < 5; ++i)
{
futures.push_back(async(launch::async, &foo, i * 3));
}
for(myFut & fut : futures)
{
vector<int> v{fut.get()}; // or vector<int> const & v{fut.get()};
cout << v.size() << endl; // 0, I expect 3
}
return 0;
}
때 스레드가 파괴 될 수 반환 foo()
- 함께 thread_local
변수. 하지만 std::future
을 사용하고 있기 때문에 std::future::get()
으로 전화 할 때까지 변수의 수명이 연장되어야합니다. 맞습니까? 하지만 내 경우에는 std::future
빈 벡터를 반환합니다. 그렇다면 규칙은 무엇입니까?