Поток может установить только SCHED_OTHER
без возможности использования CAP_SYS_NICE
. От sched(7)
:
In Linux kernels before 2.6.12, only privileged (CAP_SYS_NICE)
threads can set a nonzero static priority (i.e., set a real-time
scheduling policy). The only change that an unprivileged thread can
make is to set the SCHED_OTHER policy, and this can be done only if
the effective user ID of the caller matches the real or effective
user ID of the target thread (i.e., the thread specified by pid)
whose policy is being changed.
Это означает, что при установке политики планирования для планирования круговом (SCHED_RR
), используя pthread_attr_setschedpolicy()
это не удалось, по всей вероятности (если вы не включили эту возможность для пользователя вы работаете в качестве или запускающего как пользователь sysadmin/root, который может переопределить CAP_SYS_NICE
).
Вы можете установить возможность использования программы setcap
:
$ sudo setcap cap_sys_nice=+ep ./a.out
(при условии, a.out
ваше имя программы).
Вы бы поняли это, если вы проверили ошибку. Вы должны проверить возвращаемое значение всех функций pthread (и вообще всех функций библиотеки) для отказа.
Поскольку вы не разместил полный код, это может быть проблемой, если вы еще не присоединились к с резьбой вы создаете (как основной нить может выйти до m_thread
был создан, и этот выход в целом обработать). Таким образом, вы можете присоединиться:
pthread_join(m_thread, NULL);
или вы могли бы выйти из основного потока без присоединившиеся если основной поток больше не нужен, используя pthread_exit(NULL);
в основной().