【问题标题】:Setting a thread priority to high C将线程优先级设置为高 C
【发布时间】:2025-12-14 17:00:01
【问题描述】:

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

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

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

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

请帮忙...

谢谢

【问题讨论】:

    标签: multithreading thread-priority


    【解决方案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 吗?还是有其他方法?