ошибка: неопределенная ссылка на `sched_setaffinity' в Windows XP

В основном приведенный ниже код был предназначен для использования в Linux, и, возможно, именно поэтому я получаю сообщение об ошибке, потому что я использую Windows XP, но я полагаю, что pthreads должны одинаково хорошо работать на обеих машинах. Я использую gcc в качестве моего компилятора, и я сделал ссылку с -lpthread, но все равно получил следующую ошибку.

|21|неопределенная ссылка на sched_setaffinity'| |30|undefined reference tosched_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));
}

person pandoragami    schedule 19.11.2012    source источник


Ответы (1)


sched_getaffinity() и sched_setaffinity() строго специфичны для Linux. Windows предоставляет собственный набор конкретных вызовов Win32 API, влияющих на планирование. См. этот ответ для примера кода для Windows.

person Hristo Iliev    schedule 19.11.2012
comment
Это еще одна причина, по которой я ненавижу Microsoft. Теперь я вынужден использовать два разных API. Знаете ли вы, есть ли какая-либо причина, по которой pthreads не разрешается устанавливать сходство в Windows? - person pandoragami; 19.11.2012
comment
Я не вижу ссылок на Pthreads в вашем коде. Семейство вызовов sched_* не является частью Pthreads — это низкоуровневые системные вызовы Linux, которые предоставляют подсказки планировщику. Поскольку Pthreads не является собственным API потоковой передачи в Windows, можно было бы ожидать, что он реализован не полностью. Какую реализацию вы используете? - person Hristo Iliev; 19.11.2012
comment
Я просто использовал заголовок pthreads, который поставляется с mingw/gcc. На самом деле я использовал кодовые блоки и прилагаемый к ним mingw. Существуют ли другие многоплатформенные API (linux/windows), которые могут устанавливать сходство потоков? - person pandoragami; 19.11.2012
comment
Да, есть: подпроект hwloc Open MPI. Однако он делает гораздо больше, чем просто настройку сходства (например, перечисление топологии). - person Hristo Iliev; 19.11.2012
comment
Спасибо, выглядит интересно. - person pandoragami; 19.11.2012