需要我将所有线程调度策略设置为SCHED_RR以提高线程优先级吗?

时间:2014-01-23 04:16:29

标签: linux multithreading macos posix native

我们正在使用pthread API开发多媒体跨平台应用程序。我们希望提高audio线程优先级,使其即使在CPU很高时也能正常工作。有些事情通过测试不容易观察,所以我想先了解它是如何工作的。

我搜索了谷歌,有很多例子可以将线程安排策略设置为SCHED_RR而不是设置优先级。

例如Apple文档中的this示例代码。

int set_my_thread_priority(int priority) {
     struct sched_param sp;

     memset(&sp, 0, sizeof(struct sched_param));
     sp.sched_priority=priority;
     if (pthread_setschedparam(pthread_self(), SCHED_RR, &sp)  == -1) {
         printf("Failed to change priority.\n");
         return -1;
     }
     return 0;
}

如果我将音频线程设置为SCHED_RR,那么我假设有两个组线程,一个是SCHED_RR,另一个是SCHED_OTHER,并且优先级仅影响线程相对顺序基。

我想知道如果任务/进程中只有一个线程是SCHED_RR,它是如何工作的,或者只是不工作,而其他线程调度策略默认为SCHED_OTHER

所以问题是我是否需要将任务/所有线程计划策略设置为SCHED_RR

1 个答案:

答案 0 :(得分:0)

虽然我推荐使用SCHED_FIFO但它工作正常。无需将所有应用程序的线程设置为相同的计划策略。无论如何,操作系统完全能够安排整个系统中的所有线程。

当然,如果高优先级线程可以被其他一个线程阻塞(等待信号量等),那么你也必须开始处理它。开箱即用的Linux并不能解决优先级倒置问题。为此,您需要应用PREMPT_RT补丁集。