Уникальный и постоянный идентификатор для потока pthreads?
-
20-08-2019 - |
Вопрос
Я предположил , что pthread_t
остается постоянным - для данного потока - на протяжении всего его срока службы, но мои эксперименты, похоже, доказывают ложность этого предположения.Если идентификатор для данного потока не остается постоянным на протяжении всего срока его службы, как я могу сохранить pthread_t
таким образом, другой поток может использовать pthread_join
блокировать до тех пор, пока поток не будет завершен?
По другим причинам мне было бы полезно знать, как получить уникальный идентификатор для потока, который я могу конвертировать туда и обратно в pthread_t
.Есть ли способ сделать это?
Существует много полезной информации, но мне было трудно найти полезные ответы на эти вопросы. Я был бы признателен за любую помощь / совет, который я могу получить!
Редактировать:Кроме того, я не уверен почему, но, похоже, все работает так, как ожидалось, при добавлении sleep (1) и отключении на 1 секунду перед каждым новым потоком (внутри функции потока).Вероятно, это цепляется за соломинку, но могло бы pthread_t
значения меняются на мгновение во время запуска нового потока или что-то в этом роде??
Решение
Вы не можете полагаться на pthread_t
будучи уникальным, но вы можете использовать pthread_equal()
чтобы определить, относятся ли два идентификатора потока к одному и тому же потоку.
NAME
pthread_equal -- compare thread IDs
SYNOPSIS
#include <pthread.h>
int
pthread_equal(pthread_t t1, pthread_t t2);
DESCRIPTION
The pthread_equal() function compares the thread IDs t1 and t2.
RETURN VALUES
The pthread_equal() function will return non-zero if the thread IDs t1 and t2
correspond to the same thread. Otherwise, it will return zero.
Другие советы
Уникальный и постоянный идентификатор для потока pthreads?
Чтобы гарантировать, что каждый поток, который вы запускаете, может быть однозначно идентифицирован:
- Используйте монотонно увеличивающийся счетчик
- Назначьте счетчик для
void*
вpthread_create
Смотрите этот ответ для получения более подробной информации: Как присвоить уникальные идентификаторы потокам в оболочке pthread?