Из https://computing.llnl.gov/tutorials/pthreads/:
Присоединяющийся поток может соответствовать одному вызову pthread_join(). Логической ошибкой является попытка нескольких объединений в одном и том же потоке.
Также из "man pthread_join":
Если несколько потоков одновременно пытаются присоединиться к одному и тому же потоку, результаты не определены.
Однако с точки зрения программиста вполне логично, что несколько потоков могут захотеть дождаться завершения одного потока (аналогично барьерам).
Например, у нас могут быть потоки thread1 и thread2, работающие независимо, и мы можем захотеть, чтобы оба потока ждали завершения потока thread3.
Есть ли какая-то техническая причина для этого ограничения?
pthread_join()
возвращается, освобождаются последние ресурсы, связанные с завершенным потоком. Никакой другойpthread_join()
не может коснуться этой нити, потому что от нее ничего не осталось. Так и должно быть, иначе как библиотека pthread узнает, когда освобождать эти ресурсы? Если несколько потоков могут присоединиться к одному pthread, у вас будет постоянная утечка ресурсов для каждого завершенного потока. - person EOF   schedule 19.09.2015