Что значит "присоединиться" к потоку?

Для моего класса я должен выяснить, что не так с куском кода, а часть, с которой у меня возникла проблема с расшифровкой, -

// 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 по той же причине.