Весь идентификатор потока находится в pthread_t
Инициализация потока возвращает его pthread_t
введенный идентификатор его родителю
Каждый поток может получить свой собственный идентификатор с pthread_self()
Вы можете сравнить идентификаторы потоков с помощью функции: int pthread_equal (pthread_t, pthread_t)
Итак: Поддерживайте общую структуру данных, в которой вы можете сохранять статус потока как STARTED, RUNNING, FINISHED, используя pthread_t
ID и pthread_equal
функцию сравнения для различения потоков.Родитель устанавливает значение STARTED при запуске потока, сам поток устанавливает свое собственное состояние на RUNNING, выполняет свою работу и устанавливает себя в FINISHED после завершения.Используйте мьютекс, чтобы убедиться, что значения не изменяются во время чтения.
РЕДАКТИРОВАТЬ: Вы можете настроить своего рода «деструктор потока», используя pthread_cleanup_push
: http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_cleanup_pop.html
, т.е. зарегистрируйтепроцедура, вызываемая при выходе из потока (либо сама, либо путем отмены извне).Эта процедура может обновить статус.