将线程优先级设置为高 C

Posted

技术标签:

【中文标题】将线程优先级设置为高 C【英文标题】:Setting a thread priority to high C 【发布时间】:2015-02-17 23:02:05 【问题描述】:

我正在编写一个程序,它将创建两个线程,其中一个必须具有高优先级,另一个是默认线程。我正在使用 pthread_create() 创建线程,并希望从同一命令启动线程优先级。我这样做的方式如下:

pthread_create(&threads[lastThreadIndex], NULL, &solution, (void *)(&threadParam));

在哪里, 线程:是一个 pthread_t 类型的数组,其中包含我的所有线程。 lastThreadIndex:是一个计数器 解决方案:是我的功能 threadParam:是一个结构体,包含求解函数所需的所有变量。

我看了很多文章,大部分都建议用优先级替换NULL;但是,我从来没有找到级别关键字或确切的操作方法。

请帮忙...

谢谢

【问题讨论】:

【参考方案1】:

在 POSIX 中,第二个参数是 pthread 属性,NULL 只是表示使用默认值。

但是,您可以创建自己的 属性并设置其属性,包括通过以下方式提高优先级:

#include <pthread.h>
#include <sched.h>

int rc;
pthread_attr_t attr;
struct sched_param param;

rc = pthread_attr_init (&attr);
rc = pthread_attr_getschedparam (&attr, &param);
(param.sched_priority)++;
rc = pthread_attr_setschedparam (&attr, &param);

rc = pthread_create (&threads[lastThreadIndex], &attr,
    &solution, (void *)(&threadParam));

// Should really be checking rc for errors.

可以从this page 开始找到有关 POSIX 线程的详细信息,包括调度。

【讨论】:

你能否提供一个很好的参考来学习如何做到这一点。我面临的问题是我有一个处理 3200 维矩阵的程序。我将矩阵分解为 4 个子矩阵,并将每个子矩阵发送到要操作的线程上。我在 windows 机器上得到的执行时间是 6521 微秒(与顺序代码执行时间 6600 毫秒几乎相同);但是,当我在 linux 机器上运行相同的程序时,它的运行时间为 860 微秒(linux 机器上的顺序代码执行时间为 6300 毫秒)。 @Anas,如果您在 Windows 上使用 pthreads,它可能 pthreads_win32。如果是这样,它(我怎么能委婉地说呢?)...根据我的经验,不如 Linux 内核优化 :-) 使用 Windows 本地线程可能会更好。 你的意思是在 windows 上打开 MP 吗?还是有其他方法? @Anas:不,我的意思是msdn.microsoft.com/en-us/library/windows/desktop/…

以上是关于将线程优先级设置为高 C的主要内容,如果未能解决你的问题,请参考以下文章

如何将nodejs windows服务设置为高优先级

Android 设置线程优先级

如何设置线程优先级 delphi

ios 怎么设置多线程的优先级

如何为音频处理设置高优先级线程

Linux 线程调度与优先级