Допустим, у меня есть поток, который создается и отсоединяется в стеке так:
void foo()
{
while(true){};
}
void runThread()
{
std::thread t(foo);
t.detach();
}
int main()
{
runThread();
}
Программа, конечно, ничего не значит, но что происходит после того, как мы отсоединились и вышли runThred
? он был размещен в стеке, так что в основном t
будет уничтожен после выхода runThred
, но сам поток будет продолжать работать независимо от основного потока, потому что он отсоединен.
Является ли лучшая практика в таком примере, чтобы создать его в куче и сохранить указатель на него, делая что-либо (dcor) после этого?
Или это ничего не значит, если t
переменная уничтожена, и мы должны просто «игнорировать» это?
std::thread
объект представляет собой дескриптор потока, через который он может работать. Но как только вы позвоните detach
нет никакой связи между объектом и фактическим потоком выполнения.
Других решений пока нет …