Lockesty Ответов: 1

Программа аварийно завершает работу при инициировании нового потока в цикле while


Я хочу создать новый поток внутри цикла while, но это приводит к сбою программы.
Есть идеи, как это исправить?

#include <thread>
using namespace std;

void function1()
{
    
}

int main()
{
    while(true)
    {
        thread thread(function1);
    }
    return 0;
}


Что я уже пробовал:

Я попытался создать поток вне цикла while, и он работает нормально, но мне это нужно
внутри цикла while.

Dave Kreskowiak

Код, который вы разместили, будет бесконечно создавать потоки, пока в системе не закончатся ресурсы, довольно быстро.

С какой стати вам бесконечно создавать потоки, которые ничего не делают, как предполагает опубликованный вами код?

1 Ответов

Рейтинг:
8

k5054

Проблема заключается в том, что поток выходит из области действия, не будучи присоединенным, поэтому программа аварийно завершает работу. Видеть здесь[^]

Предполагая, что это действительно сработает, вы все равно получите сбой, так как у вас есть бесконечный цикл. В конце концов у вас закончатся ресурсы для создания новых потоков. Может быть, это просто короткая демонстрация, чтобы показать, с чем вы столкнулись?


Lockesty

Да, это тот ответ, который я искал, большое вам спасибо !
Я думал, что он автоматически отсоединяет нить, когда я не присоединяюсь к ней, по крайней мере, это был мой логический вывод.

На самом деле я уже думал что это может быть из за бесконечного повторения поэтому я проверил его внутри цикла while но при определенных условиях но он все равно разбился

К счастью отсоединение нити делает свое дело