2012-11-19 1 views
0

Fondamentalement, le code ci-dessous était destiné à Linux et peut-être la raison pour laquelle je reçois l'erreur parce que j'utilise Windows XP, mais je pense que pthreads devrait fonctionner comme bien sur les deux machines. J'utilise gcc comme compilateur et j'ai fait un lien avec -lpthread mais j'ai quand même eu l'erreur suivante.erreur: référence non définie à `sched_setaffinity 'sur Windows XP

| 21 | référence indéfinie à sched_setaffinity'| |30|undefined reference to sched_setaffinity '|

S'il existe une autre méthode pour définir l'affinité du thread à l'aide de pthreads (sous Windows), faites-le moi savoir. Je sais déjà tout sur les fonctions d'affinité des threads windows.h disponibles mais je veux garder les choses multiplateformes. Merci.

#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)); 
} 

Répondre

1

sched_getaffinity() et sched_setaffinity() sont strictement appels spécifiques à Linux. Windows fournit son propre ensemble d'appels d'API Win32 spécifiques qui affectent la planification. Voir this answer pour l'exemple de code pour Windows.

+0

Ceci est juste une raison de plus que je déteste Microsoft. Maintenant, je suis obligé d'utiliser deux API différents. Savez-vous s'il y a une raison pour laquelle pthreads n'a pas été autorisé à définir l'affinité sur Windows? – pandoragami

+0

Je ne vois aucune référence à Pthreads dans votre code. La famille d'appels 'sched_ *' ne fait pas partie de Pthreads - ce sont des appels système Linux de bas niveau qui fournissent des indications au planificateur. Comme Pthreads n'est pas l'API de thread natif sous Windows, on peut s'attendre à ce qu'il ne soit pas complètement implémenté. Quelle implémentation utilisez-vous? –

+0

Je viens d'utiliser l'entête pthreads qui vient avec mingw/gcc. J'ai utilisé des blocs de code et le Mingw qui l'accompagnait. Y a-t-il d'autres API qui sont multiplateformes (linux/windows) qui peuvent définir l'affinité des threads? – pandoragami