Уникальный и постоянный идентификатор для потока pthreads?

StackOverflow https://stackoverflow.com/questions/1052489

  •  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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top