Они не одинаковы . Вот некоторые биты, которые я собрал из TLPI (я не смог найти достаточно большой блок, который полностью описывает это). Если вы спешите, возможно, вам нужна последняя часть.
gettid
В Linux 2.4 появился новый системный вызов gettid()
, позволяющий потоку получить собственный идентификатор потока.
Каждый поток в группе потоков отличается уникальным идентификатором потока. Идентификатор потока представлен с использованием того же типа данных, который используется для идентификатора процесса, pid_t
. Идентификаторы потоков являются уникальными для всей системы, и ядро гарантирует, что идентификаторы потоков не будут такими же, как любые идентификаторы процессов в системе, кроме случаев, когда поток является лидером группы потоков для процесса.
pthread_self
Каждый поток в процессе уникально идентифицируется по идентификатору потока. Поток может получить свой собственный идентификатор, используя pthread_self()
.
Функция pthread_equal()
необходима для сравнения идентификаторов потоков, поскольку тип данных pthread_t
должен рассматриваться как непрозрачные данные .
В реализациях потоков в Linux идентификаторы потоков уникальны для всех процессов. Тем не менее, это не обязательно имеет место в других реализациях, и SUSv3 явно отмечает, что приложение не может использовать идентификатор потока для идентификации потока в другом процессе .
gettid
против pthread_self
Идентификаторы потоков POSIX не совпадают с идентификаторами потоков, возвращаемыми системным вызовом gettid()
, специфичным для Linux. Идентификаторы потоков POSIX назначаются и поддерживаются реализацией потоков. Идентификатор потока, возвращаемый gettid()
, представляет собой число (аналогичное идентификатору процесса), назначаемое ядром.
Я бы пошел с pthread_setaffinity_np
, но помните, что в руководстве написано:
Эти функции реализованы сверху
sched_setaffinity (2)