基本的に、以下のコードは Linux での使用を意図したものであり、Windows XP を使用しているためエラーが発生する理由かもしれませんが、pthreads は両方のマシンで同様に機能するはずです。私はコンパイラとして gcc を使用しており、 -lpthread とリンクしましたが、とにかく次のエラーが発生しました。
|21| sched_setaffinity'|
|30|undefined reference to
sched_setaffinity への未定義の参照'|
(Windows 上で) pthreads を使用してスレッド アフィニティを設定する別の方法がある場合は、お知らせください。利用可能な 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));
}