поток в моей программе вызывает pthread_join(thread_id, nullptr);
2 раза за то же thread_id
из той же вызывающей нити., соединяющий один и тот же pthread несколько раз
Первый раз вызов возвращается успешно, но во второй раз он просто висит бесконечно. В документации четко не указано, что запретить вызывать pthread_join несколько раз для одного и того же thread_id. Это действительно так?
Я знаю, что я могу реализовать синхронизацию потока с помощью pthread_cond_t, но сначала хочу понять ограничения pthread_join.
Это не имеет смысла: 'pthread_join' возвращается, когда поток, соединенный с ним, закончился. Поток не может заканчиваться более одного раза ... Кроме того: [man page] (http://linux.die.net/man/3/pthread_join) гласит: * Соединение с потоком, который ранее был присоединен, приводит к Неопределенное поведение. * – Kninnug
В документации четко указано: «Если этот поток уже завершен, то pthread_join() немедленно возвращается». Так что имеет смысл, если разные части программы заинтересованы проверить, завершился ли их дочерний процесс. – Roman
@ Roman: «уже завершенные, но еще не присоединившиеся» и «уже присоединившиеся» - это совершенно разные вещи. ** Любое ** использование 'pthread_t' после' pthread_join' на нем является чрезвычайно опасным неопределенным поведением (это ошибка типа after-free). –