1

基本的に、以下のコードは Linux での使用を意図したものであり、Windows XP を使用しているためエラーが発生する理由かもしれませんが、pthreads は両方のマシンで同様に機能するはずです。私はコンパイラとして gcc を使用しており、 -lpthread とリンクしましたが、とにかく次のエラーが発生しました。

|21| sched_setaffinity'| |30|undefined reference tosched_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));
}
4

1 に答える 1

1

sched_getaffinity()およびsched_setaffinity()厳密に Linux 固有の呼び出しです。Windows には、スケジューリングに影響する特定の Win32 API 呼び出しの独自のセットが用意されています。Windows のサンプル コードについては、この回答を参照してください。

于 2012-11-19T10:14:12.163 に答える