У меня есть pthread_t, и я бы хотел изменить его близость к процессору. Проблема в том, что я использую glibc 2.3.2, у которого нет pthread_setaffinity_np(). Это нормально, потому что pthread_setaffinity_np() сам является оберткой sched_setaffinity(), которую можно вызывать, передавая идентификатор потока вместо процесса ID, чтобы установить сродство к произвольному потоку.
НО... Идентификатор потока, с которым может работать sched_setaffinity, является идентификатором потока ОС, который вы можете получить из gettid(). Это отличается от непрозрачного типа pthread_t, а gettid() возвращает только поток-идентификатор текущего потока. Мне нужно уметь устанавливать сродство к процессору произвольного потока.
К сожалению, я не могу получить доступ к частным частям pthread, что позволило бы мне украсть идентификатор потока, наведя pthread_t на struct pthread *
. Тем лучше, я полагаю, поскольку полагаться на частные реализации требует еще больших проблем.
Я также читал функцию pthread_getunique_np, однако это возвращает "уникальный интегральный идентификатор", который я не полагать, что это форма или форма, эквивалентная идентификатору потока ОС.
Следовательно, вопрос: как я могу получить идентификатор потока из произвольного pthread_t?