C++ std::thread должен быть создан в куче или в стеке

Допустим, у меня есть поток, который создается и отсоединяется в стеке так:

void foo()
{
    while(true){};
}

void runThread()
{
    std::thread t(foo);
    t.detach();
}

int main()
{
    runThread();
}

Программа, конечно, ничего не значит, но что происходит после того, как мы отсоединились и вышли runThred? он был размещен в стеке, так что в основном t будет уничтожен после выхода runThred, но сам поток будет продолжать работать независимо от основного потока, потому что он отсоединен.

Является ли лучшая практика в таком примере, чтобы создать его в куче и сохранить указатель на него, делая что-либо (dcor) после этого?

Или это ничего не значит, если t переменная уничтожена, и мы должны просто "игнорировать" это?

1 ответ

Решение

std::thread объект представляет собой дескриптор потока, через который он может работать. Но как только вы позвоните detach нет никакой связи между объектом и фактическим потоком выполнения.

Другие вопросы по тегам