1

基本上,下面的代码是为在 linux 上使用而设计的,也许这就是我得到错误的原因,因为我使用的是 windows XP,但我认为 pthreads 应该在两台机器上都能正常工作。我使用 gcc 作为我的编译器,并且我确实与 -lpthread 链接,但我还是得到了以下错误。

|21|对sched_setaffinity'| |30|undefined reference tosched_setaffinity 的未定义引用'|

如果有另一种方法可以使用 pthreads(在 Windows 上)设置线程亲和性,请告诉我。我已经知道所有可用的 windows.h 线程关联函数,但我想保持多平台。谢谢。

#include <stdio.h>
#include <math.h>
#include <sched.h>

double waste_time(long n)
{
    double res = 0;
    long i = 0;
    while(i <n * 200000)
    {
        i++;
        res += sqrt (i);
    }
    return res;
}
int main(int argc, char **argv)
{
    unsigned long mask = 1; /* processor 0 */

/* bind process to processor 0 */
    if (sched_setaffinity(0, sizeof(mask), &mask) <0)//line 21
    {
        perror("sched_setaffinity");
    }

/* waste some time so the work is visible with "top" */
    printf ("result: %f\n", waste_time (2000));

    mask = 2; /* process switches to processor 1 now */
    if (sched_setaffinity(0, sizeof(mask), &mask) <0)//line 30
    {
        perror("sched_setaffinity");
    }

/* waste some more time to see the processor switch */
    printf ("result: %f\n", waste_time (2000));
}
4

1 回答 1

1

sched_getaffinity()并且sched_setaffinity()是严格特定于 Linux 的调用。Windows 提供了自己的一组影响调度的特定 Win32 API 调用。有关 Windows 的示例代码,请参阅此答案

于 2012-11-19T10:14:12.163 回答