Создать поток в режиме ожидания, используя pthreads - PullRequest
1 голос
/ 31 октября 2011

В Win32 вы можете создать поток в режиме ожидания, используя параметр dwCreationFlags с CREATE_SUSPENDED.Я ищу похожую функциональность с помощью pthreads.Обратите внимание, что я не хочу приостанавливать поток после его запуска, а затем приостанавливать его, используя условные переменные, но фактически создаю его в режиме приостановки, а затем запускаю его позже.

Преимущество использования этого подхода заключается в том, что я могу назначить некоторые свойства этому потоку до его запуска.Например, связать его с определенным ядром перед запуском, что более эффективно, чем первый запуск, а затем назначить его ядру, поскольку оно может быть перенесено с одного ядра на другое.по крайней мере привязать поток к ядру при вызове pthread_create ?

Ответы [ 3 ]

6 голосов
/ 31 октября 2011

Если вы хотите привязать поток к процессору с самого начала, вы можете использовать форму pthread_create с аргументом pthread_attr_t. Linux поддерживает специальный атрибут pthread_attr_setaffinity_np , который позволяет привязать поток к определенному набору ЦП. Не путайте это с pthread_setaffinity_np, который требует уже запущенного потока.

План действий таков:

// create generic attribute set
pthread_attr_t attr;
pthread_attr_init(&attr);

// enhance with CPU set
pthread_attr_setaffinity_np(&attr, ...cpuset-args);

// create thread with right attributes including CPU set
pthread_t thread;
pthread_create(&thread, &attr, ...);

// viola, thread runns on given CPU-set, cleanup
pthread_attr_destroy(&attr);
0 голосов
/ 31 октября 2011

В настоящее время нет атрибутов pthread для создания потока в приостановленном состоянии.

Вероятно, вам придется приостановить его вручную после создания.

Для реализации приостановки / возобновления вы можете посмотреть здесь

0 голосов
/ 31 октября 2011

Начальное приостановленное состояние или привязка ядра будут обрабатываться атрибутами, указанными во втором аргументе pthread_create, с параметрами, задокументированными на man-странице pthread_attr_init. Я не нашел там соответствующих флагов, так что сейчас это невозможно. Вы можете сообщить об ошибке в реализации Linux pthreads.

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