Установка идентификатора потока - PullRequest
1 голос
/ 28 ноября 2011

Я хочу иметь возможность устанавливать свои собственные идентификаторы потоков, поэтому, например, для четырех потоков, которые я создаю в приложении, я хочу, чтобы их идентификаторы были равны 0, 1, 2 и 3. Я знаю, что вы можете использовать нить локальную переменную и присвоить ей идентификатор. Однако по какой-то причине я не могу использовать локальную переменную потока. Вы могли бы сказать, что передача идентификатора потока в качестве аргумента функции потока может помочь, но в этом случае вам нужно передавать идентификатор потока в каждую функцию, используемую потоком, что, конечно, недопустимо.

Небольшой поиск в Google показал мне set_tid_address , который выглядит интересным по своему названию, но я не уверен, что он может выполнить мою цель, так как его документация не ясна. Есть идеи, как этого добиться?

Ответы [ 3 ]

2 голосов
/ 28 ноября 2011

PID управляются ядром с использованием - в моем ядре - битовой карты pidmap_array. Более или менее, следующий PID будет последним увеличенным на единицу (до тех пор, пока круговой робин не вернется к старту при необходимости). За исключением частного переопределения, как предложено выше, вы ничего не можете с этим поделать.

1 голос
/ 29 ноября 2011

Возможные решения:

  1. Передайте структуру каждому создаваемому потоку (обычно в виде указателя), а затем попросите их заполнить идентификатор потока и другие атрибуты, если это необходимо - это также можно использовать для предоставления параметров.
  2. Имейте отображение, которое сопоставляет ваши логические "номера потоков" и "идентификаторы потоков"
0 голосов
/ 28 ноября 2011

по какой-то причине я не могу использовать локальную переменную потока

Выяснить причину и устранить ее.

В противном случае вы практикуете "Программирование по совпадению".

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