Что значит "присоединиться" к потоку?
Для моего класса я должен выяснить, что не так с куском кода, а часть, с которой у меня возникла проблема с расшифровкой, -
// joining a thread blocks until that thread finishes
a.join();
b.join();
Присоединяется к потоку так же, как блокировка потока? Потому что я думаю, что точка этого назначения - это то, что вы не должны оставлять потоки разблокированными.
Ответы
Ответ 1
Вот как один поток ждет завершения другого потока!
Хорошим вариантом использования join
является, например, функция main()
/thread создает поток и не ждет (используя join
) для созданного потока для завершения и просто выходит, а затем вновь созданный поток также остановится!
Вот приятное объяснение управления потоками в целом и Thread Join, в частности! И вот некоторые фрагменты кода, которые показывают некоторые варианты использования join
, и что происходит, когда вы его не используете!
Ответ 2
В комментарии все сказано. Присоединение к потоку означает ждать завершения. То есть блокируйте текущий поток до тех пор, пока не завершится другой.
Ответ 3
Подумайте о том, чтобы начать поток как "разветвление" вашего процесса на два отдельных потока исполнения. Затем объединение - это обратное - оно, где эти два отдельных потока объединяются (и только оттуда продолжается оттуда).
Ответ 4
Чтобы присоединиться к потоку, нужно подождать, пока этот поток не будет жить. Когда поток выйдет, поток, вызывающий join()
, продолжит выполнение. Таким образом, в приведенном выше примере поток (предположительно основной поток), вызывающий a.join()
и b.join()
, будет ждать, пока оба потока a
и b
(в этом порядке) закончат свое задание, а затем продолжат выполнение кода то есть после b.join()
.
Ответ 5
- join() ждет завершения потока, чтобы завершить его выполнение.
- Вам нужно либо отсоединить() поток, либо join() поток для его управления.
- join() также очищает ресурсы, занятые потоком. Вы можете найти join(), вызванный в деструкторе класса RAII по той же причине.