Уникальный и постоянный идентификатор для потока pthreads? - PullRequest
1 голос
/ 27 июня 2009

Я предположил, что pthread_t остается постоянным - для данного потока - на протяжении всей своей жизни, но мои эксперименты, похоже, подтверждают это предположение ложным. Если идентификатор для данного потока не остается постоянным на протяжении всей его жизни, как я могу сохранить pthread_t, чтобы другой поток мог использовать pthread_join для блокировки до завершения потока?

По другим причинам мне было бы полезно узнать, как получить уникальный идентификатор для потока, который я могу конвертировать в pthread_t и обратно. Есть ли способ сделать это?

Существует много отличной информации, но мне было трудно найти полезные ответы на эти вопросы. Буду признателен за любую помощь / совет, который я могу получить!

edit: Кроме того, я не уверен, почему, но кажется, что все работает, как ожидалось, при добавлении sleep (1) и sleep для 1sec в начале каждого нового потока (в функции потока). Это, вероятно, воспринимается как соломинка, но могут ли значения pthread_t мгновенно измениться во время запуска нового потока или что-то еще?

Ответы [ 2 ]

1 голос
/ 27 июня 2009

Нельзя полагаться на то, что 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.
0 голосов
/ 11 мая 2015

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

Чтобы каждый поток, который вы запускаете, мог быть однозначно идентифицирован:

  • Используйте монотонно увеличивающийся счетчик
  • Назначить счетчик для void* in pthread_create

См. Этот ответ для получения более подробной информации: Как назначить уникальные идентификаторы потокам в оболочке pthread?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...