2013-09-18 6 views
4

Каково состояние потока после его завершения.?C++ 11 Многопоточность: состояние потока после выполнения

Он уничтожается сразу после его выполнения или уничтожается родительским потоком.?

+3

Это не работает. Если вы имеете в виду объекты 'std :: thread', они уничтожаются ... когда они уничтожаются. Это обычные объекты, никаких специальных магических правил. –

ответ

4

Объект std::thread отличается от основного потока управления (хотя они должны отображаться 1 на 1).

Это разделение действительно важно, и это означает, что std::thread и поток управления могут иметь разную продолжительность жизни. Например, если вы создаете свой std::thread в стеке, вам действительно нужно вызвать thread::detach, прежде чем ваш объект будет уничтожен (если вы не деструктор, вы вызовете terminate). Кроме того, как указал Гризли, вы можете вызвать .join() перед уничтожением вашего объекта, который будет блокироваться до завершения выполнения потока.

Это также отвечает на ваш вопрос - объект не уничтожается после завершения потока - он ведет себя как любой другой объект C++ - он будет уничтожен, когда он выйдет из области действия (или получит deleted).

+1

Стоит упомянуть, что вызов '.join()', который блокируется до тех пор, пока выполнение потока не завершится, до того, как уничтожение потока также является допустимым (и часто достаточно правильным), поэтому время жизни потока может быть привязано (до определенной степени) к времени жизни 'std :: thread' – Grizzly

+1

" деструктор будет вызывать 'terminate' в этом потоке". Нет, он будет называть «завершать» всю вашу программу. Игра закончена. – MSalters

+0

@MSalters Спасибо, я сделал редактирование в сообщении! –

Смежные вопросы