Предполагая, что вы работаете с достаточно свежей версией ядра Linux, вы можете попытаться установить для своего потока значение SCHED_IDLE, как показано на по этой ссылке , т. Е .:
void set_idle_priority() {
struct sched_param param;
param.sched_priority = 0;
if (pthread_setschedparam(pthread_self(), SCHED_IDLE, &m) != 0)
perror("pthread_setschedparam");
}
В этом режиме ваш поток будет работать только тогда, когда больше ничего в системе не хочет запускаться.
... тем не менее, я не уверен, что это действительно решит вашу проблему, так как из вашего описания у вас не должно быть этой проблемы, во-первых. В частности, наличие потока переключения процессора, работающего с нормальным приоритетом / приоритетом по умолчанию, не должен значительно замедлять работу вашей системы, поскольку планировщик должен автоматически определять его характер загрузки процессора и неявно удалять его, без каких-либо специальных действий. Это заставляет меня думать, что ваша проблема, вероятно, связана не с использованием процессора потоком, а с чем-то другим, например, может быть, ваш поток использует всю доступную память ОЗУ системы, в результате чего системе приходится перемещать память на диск. Это определенно приведет к значительному замедлению системы. Другой возможностью было бы, если бы ваш поток делал много дискового ввода-вывода (хотя это кажется менее вероятным, так как в этом случае это, вероятно, не будет закреплять ядро процессора).
Вы можете попытаться временно заменить вычисления в вашем потоке тривиальным циклом записи ЦП, например ::11010.
void my_thread_entry_func()
{
while(1) {/* empty */}
}
... и запустите его, чтобы посмотреть, не вызывает ли оно замедления Если нет, то не само использование ЦП вызывает замедление, а скорее что-то еще, что делает ваш поток, и вы захотите провести дополнительное тестирование, чтобы точно определить, какая часть (части) пути выполнения вашего потока виновники.