#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. Было бы полезно уточнить, что второй момент не уникален для потоков.