2012-11-19 69 views
0

下面基本上是打算在Linux上使用,也許這就是代碼,因爲我使用的是Windows XP,我得到了錯誤的原因,但我估計應該並行線程的工作一樣以及兩臺機器上。我使用gcc作爲我的編譯器,而且我使用了-lpthread鏈接,但是我得到了以下錯誤。錯誤:未定義的引用`了sched_setaffinity」在Windows XP上

| 21 |未定義參考sched_setaffinity'| |30|undefined reference to了sched_setaffinity「|

如果有設置使用並行線程(在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)); 
} 

回答

1

sched_getaffinity()sched_setaffinity()嚴格來說是Linux特有的調用。 Windows提供了自己的一組特定的Win32 API調用,這些調用會影響調度。有關Windows的示例代碼,請參閱this answer

+0

這只是我討厭微軟的另一個原因。現在我不得不使用兩種不同的API。你知道是否有任何理由不允許pthread在Windows上設置親和性? – pandoragami

+0

我在代碼中看不到任何對Pthreads的引用。 sched_ *系列調用不是Pthreads的一部分,它們是低級別的Linux系統調用,爲調度程序提供提示。由於Pthreads不是Windows上的本地線程API,人們可能會認爲它沒有完全實現。你使用哪個實現? –

+0

我剛剛使用了mingw/gcc附帶的pthreads頭文件。我實際上使用了codeblocks和mingw。是否還有其他可以設置線程關聯的多平臺(linux/windows)的apis? – pandoragami