Объединяемый поток в C

#c #multithreading

#c #многопоточность

Вопрос:

http://www.cplusplus.com/reference/thread/thread/joinable/

Объект thread является объединяемым, если он представляет поток выполнения.

Объект thread не может быть объединен ни в одном из этих случаев:

 if it was **default-constructed**.
if it has been **moved from** (either constructing another thread object, or assigning to it).
if either of its members join or detach has been called.
  
  • Что здесь означает сконструированный по умолчанию?

  • W.R.T перенесено из — Когда нам нужно поместить потоки в вектор, мы можем создавать объекты потоков снаружи, а затем перемещать их в векторе. Это один из случаев, на который ссылается this moved from?

  • После того, как detach был вызван один раз, можем ли мы никогда не присоединяться к нему снова?

Ответ №1:

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

Это означает std::thread, который был создан без аргументов и, следовательно, не представляет поток (т. Е. он не «запущен»). Смотрите документы: https://en.cppreference.com/w/cpp/thread/thread/thread

W.R.T перенесено из — Когда нам нужно поместить потоки в вектор, мы можем создавать объекты потоков снаружи, а затем перемещать их в векторе. Это один из случаев, на который ссылается this moved from?

Да, вы не можете присоединиться к потоку после перемещения его в вектор. Но вы, конечно, можете присоединиться к новому объекту потока внутри вектора (куда он был «перемещен»).

После того, как detach был вызван один раз, можем ли мы никогда не присоединяться к нему снова?

Это верно, вы не можете присоединиться к потоку, который уже был присоединен или отсоединен.

Комментарии:

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