簡體   English   中英

thread_local和std :: future對象-對象的生存期是多少?

[英]thread_local and std::future object - what is the lifetime of an object?

這是我的測試代碼:

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返回一個空向量。 那么有什么規則?

但是由於我使用的是std :: future,因此該變量的壽命應延長到調用std :: future :: get()之前,對吧?

事實並非如此。 std :: async使用的線程將在與將來關聯的std::promise上調用set_value() ,然后可以自由終止。 因此,您的線程局部變量很可能在std::future::get()返回之前甚至在您調用它之前就被銷毀了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM