Multithreading 错误:未定义对'sched_setaffinity';在windows xp上

Multithreading 错误:未定义对'sched_setaffinity';在windows xp上,multithreading,windows-xp,pthreads,affinity,Multithreading,Windows Xp,Pthreads,Affinity,基本上,下面的代码是在linux上使用的,可能这就是我之所以出错的原因,因为我使用的是windows XP,但我认为pthread应该在这两台机器上都能正常工作。我使用gcc作为我的编译器,我确实链接了-lpthread,但我还是得到了以下错误 |21 |未定义对sched_setaffinity'的引用| |30 |未定义对sched_setaffinity'的引用| 如果有其他方法可以使用pthreads(在windows上)设置线程关联,请告诉我。我已经知道所有可用的windows.h线程

基本上,下面的代码是在linux上使用的,可能这就是我之所以出错的原因,因为我使用的是windows XP,但我认为pthread应该在这两台机器上都能正常工作。我使用gcc作为我的编译器,我确实链接了-lpthread,但我还是得到了以下错误

|21 |未定义对
sched_setaffinity'的引用|
|30 |未定义对
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));
}
#包括
#包括
#包括
双倍浪费时间(长n)
{
双res=0;
长i=0;

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

这只是我讨厌Microsoft的另一个原因。现在我被迫使用两个不同的API。你知道为什么不允许pthreads在Windows上设置关联性有什么原因吗?我不知道在上,您的代码中看不到任何对Pthreads的引用。
sched.*
调用系列不是Pthreads的一部分-它们是为调度程序提供提示的低级Linux系统调用。由于Pthreads不是Windows上的本机线程API,因此可以预期它没有完全实现。您使用哪种实现?我只是使用了mingw/gcc附带的pthreads头。我使用了代码块和它附带的mingw。是否有其他多平台(linux/windows)API可以设置线程关联?是的,有:OpenMPI的子项目。它比关联设置(例如拓扑枚举)做得更多。谢谢,看起来很有趣。