Как ядро ​​linux сбрасывает флаг «used» в поле «tid» в «struct pthread» GLIBC? - PullRequest
0 голосов
/ 20 сентября 2018

При прохождении кода glibc наблюдается строка, описывающая «Обратите внимание, что мы не сбрасываем флаг« used »в поле« tid ». Это делается ядром» в glibc_source (версия 2.21) ( ссылка на файл в glibc-источнике ) в строке 760.

Насколько я понимаю, glibc повторно использует стек потоков для T2, поддерживаемый в списке стеков кэша.Но прежде чем повторно использовать этот стек, он проверяет наличие поля tid в дескрипторе потока T1 (который уже сбрасывается в -1 после pthread_join в T1).

T1 - First thread.
T2 - Second thread created after T1 exited.

Согласно комментарию в файле (allocatestack.c: 760), поле 'tid' struct pthread сбрасывается ядром linux.Но, насколько я понимаю, поле tid сбрасывается pthread_join.

как поле 'tid' сбрасывается ядром?Пожалуйста, исправьте, если мое понимание неверно.

1 Ответ

0 голосов
/ 04 октября 2018

Здесь подразумевается, что элемент tid также используется в качестве флага, чтобы указать, используется ли стек или нет.Он не ссылается на бит внутри члена.

Ядро устанавливает член tid в ноль при выходе из потока, потому что системный вызов clone вызывается с флагом CLONE_CHILD_CLEARTID и адресомчлена tid передается ему.Подробнее см. sysdeps/unix/sysv/linux/createthread.c.

...