Установить "хороший уровень" темы из темы создателя? - PullRequest
1 голос
/ 13 октября 2011

Я работаю над приоритетами потоков в моем приложении. Один поток в реальном времени запланирован с SCHED_RR. Я использую pthread_setschedparam, чтобы установить эту политику и приоритет для нее. pthread_setschedparam принимает идентификатор потока в качестве первого аргумента, поэтому после создания потока с помощью boost::thread я могу установить его приоритет в реальном времени.

Однако другой поток должен иметь определенный хороший уровень, но не планировать в реальном времени. Я могу использовать

pid_t tid;
tid = syscall(SYS_gettid);
int ret = setpriority(PRIO_PROCESS, tid, nicelevel);

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

Спасибо!

1 Ответ

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

Класс boost :: thread предоставляет открытый метод native_handle(). В реализации на основе pthreads этот метод может вернуть tid (он также может вернуть pthread_t *, в зависимости от значения handle в данном конкретном случае) .

Если он действительно возвращает tid, его использование должно решить вашу проблему. В противном случае вам, вероятно, придется передать значение, возвращаемое gettid() из функции потока, в глобальную область, как подсказывает этот ответ .

...