将线程优先级设置为高 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, ¶m);
(param.sched_priority)++;
rc = pthread_attr_setschedparam (&attr, ¶m);
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的主要内容,如果未能解决你的问题,请参考以下文章