Как я получаю идентификатор потока от произвольного pthread_t?

Попробуйте добавить к вам модель: protected $guarded = ['_token'];

38
задан Skrud 17 February 2009 в 20:16
поделиться

2 ответа

С тех пор pthread с не должны быть реализованы с потоками Linux (или потоки ядра вообще, в этом отношении), и некоторые реализации являются полностью уровнем пользователя или смешанный, pthread, S-интерфейс не обеспечивает функции для доступа к этим деталям реализации, поскольку это не было бы портативным (даже через pthread реализации с на Linux). Библиотеки потока, которые используют их, могли обеспечить это как расширение, но там, кажется, не никто, которые делают.

Кроме доступа к внутренним структурам данных библиотеки поточной обработки (который Вы понятно не хотите, хотя с Вашими предположениями о привязке процессора и идентификаторах потока Linux, Ваш код не будет портативным так или иначе), Вы можете сыграть шутку во время создания при управлении кодом, который создает потоки:

Дают pthread_create() функция записи, которая звонит gettid() (который по тому, как Вам придется, вероятно, сделать использование syscall макрос непосредственно, потому что это не всегда экспортируется libc), хранит результат где-нибудь и затем вызывает исходную функцию записи. Если у Вас есть несколько потоков с той же функцией записи, можно передать увеличенный указатель в массив в arg аргумент pthread_create, который будет затем передан функции записи, которую Вы создали для хранения идентификатора потока в. Сохраните pthread_t возвращаемое значение [1 110] в том же порядке, и затем Вы сможете искать идентификаторы потока Linux всех потоков, которые Вы создали, учитывая их pthread_t значение.

, Стоит ли этот прием того, зависит от того, как важная установка привязки ЦП находится в Вашем случае, по сравнению с не доступом к внутренним структурам библиотеки потока или в зависимости от библиотеки потока, которая обеспечивает pthread_setaffinity_np.

33
ответ дан BD at Rivenhill 10 October 2019 в 07:53
поделиться

Я предложил бы простое обходное решение с общим международным массивом, где Вы могли записать идентификатор потока из потоков для доступа к нему позже.

Hope, которая помогает.

1
ответ дан Kamil Zadora 10 October 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: