Использование временного объекта для инициализации потока - PullRequest
2 голосов
/ 14 марта 2019

Неправильно ли инициализировать поток, используя временный объект потока, который может выйти из области видимости во время выполнения потока?

В программе, приведенной ниже, я попробовал 2 метода, приведенных ниже, и оба они работали без ошибок.

#include<thread>
using namespace std;

void consumer()
{
  for(;;)
   {}
}

int main()
{
  thread t[5];

  for(int i=0;i<5;i++)
  {
    /*
      * Method 1
      t[i]=std::thread(consumer);
    */

    /*
     * Method 2
     thread local(consumer);
     t[i]=std::move(local);
    */

     t[i].detach();
   }
   while(1)
    {}
   return 0;
}

1 Ответ

2 голосов
/ 14 марта 2019

Оба метода работают нормально.

Точнее, operator= выполняет ход в обоих случаях.Таким образом, состояние созданного потока сохраняется в t[i], и после присваивания как временному (case 1), так и local (case 2) задается созданный по умолчанию поток, который может умереть при завершении оператора (case)1) или выход из блока (случай 2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...