Мне было поручено создать библиотеку потоков на уровне пользователя, которая копирует функциональность pthread
(полное раскрытие: это для курса ОС). Тем не менее, мне неясно, как pthread_join()
а также pthread_exit()
взаимодействовать, когда поток уже вышел.
В частности, страница руководства гласит:
Функция pthread_join () ожидает потока, указанного потоком
прекратить. Если этот поток уже завершен, то
pthread_join () возвращается немедленно.
Является ли это гарантией того, что даже если я создам миллионы потоков, их результаты будут доступны для одного объединения? В противном случае, как долго можно ожидать, что результат будет сохраняться?
Я не ищу совета о том, как это реализовать (это самое интересное!), Я просто пытаюсь закрепить поведение, прежде чем погрузиться.
Ограничения по времени нет, реализация должна поддерживать «возвращаемое значение», пока сам процесс активен, чтобы сделать его доступным для объединения.
Определение POSIX для pthread_exit
просто говорит:
pthread_exit()
функция должна завершить вызывающий поток и сделать значениеvalue_ptr
доступен любое успешное соединение с завершающей нитью.
Не имеет значения, было ли объединение инициировано до выхода, или спустя годы, или был только один дополнительный поток или сотни.
Других решений пока нет …