当线程处于活动状态时 std::thread::joinable() 返回 false

时间:2021-03-28 13:18:41

标签: c++ multithreading stdthread

我正在尝试从线程本身调用 std::thread::joinable()。然而,即使线程应该处于活动状态,返回值在开始时也是假的。例如下面的一段代码:

#include <iostream>

int main()
{
    std::thread thethread;
    int a = 0;
    auto thefun = [&]() {
        a++;
        a++;
        std::cout << thethread.joinable() << std::endl;
        std::cout << thethread.joinable() << std::endl;
        std::cout << "msg2 from thefun" << std::endl;
        std::cout << thethread.joinable() << std::endl;
    };
    thethread = move(std::thread(thefun));
    thethread.join();

    return 0;
}

输出:

0
1
msg from thefun
1

我不明白为什么对 thethread.joinable() 的第一次调用返回 false 而当调用 std::cout 时它开始返回 true。我有一种感觉,这是由我的愚蠢错误引起的,我希望有人能指教我。也许我不应该在线程本身中调用 joinable()

0 个答案:

没有答案
相关问题