基本上,下面的代码是为在 linux 上使用而设计的,也许这就是我得到错误的原因,因为我使用的是 windows XP,但我认为 pthreads 应该在两台机器上都能正常工作。我使用 gcc 作为我的编译器,并且我确实与 -lpthread 链接,但我还是得到了以下错误。
|21|对sched_setaffinity'|
|30|undefined reference to
sched_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));
}