Лучший способ получить идентификатор потока, чем pthread_self или gettid - PullRequest
0 голосов
/ 19 июня 2011

У меня вопрос, есть ли функция, которая возвращает идентификатор потока, отличный от pthread_self и gettid . Проблема с pthread_self заключается в том, что он возвращает адрес, а gettid возвращает общесистемный глобальный идентификатор. Мне нужен относительный идентификатор потока, поэтому идентификаторы потока должны быть 0, 1, 2, 3 и т. Д., А не адреса, как в случае pthread_self .

1 Ответ

4 голосов
/ 19 июня 2011

Нет.Если вам это действительно нужно (в чем я сомневаюсь), реализуйте свой собственный механизм.

  • Объявите глобальный static int thread_count;
  • Объявите глобальный static __thread int my_thread_id;
  • Когдапоток запускается, блокирует мьютекс и назначает идентификатор

Вот пример:

static int thread_count;
static __thread int my_thread_id;
static pthread_mutex_t start_mtx = PTHREAD_MUTEX_INITIALIZER;

static void *th_function(void *arg)
{
    pthread_mutex_lock(&start_mtx);
       my_thread_id = thread_count++;
    pthread_mutex_unlock(&start_mtx);
    /* rest of function */
}

Очевидно, что вы также можете использовать данные, специфичные для потока (pthread_setspecific и т. д.)является стандартным).

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