2016-10-15 3 views
1

Also in meinem Vortrag mein Professor hat uns einige Code, den wir verwenden müssen, um in der nächsten Zuordnung kompilieren, ist es die Pthread Scheduling-API betitelt, und dies ist der Code:Kann nicht Pthread Scheduling-API

#include <pthread.h> 
#include <stdio.h> 
#define NUM_THREADS 5 

int main(int argc, char *argv[]) 
{ 

    int i; 
    pthread_t tid[NUM_THREADS]; 
    pthread_attr_t attr; 
    /*get default attributes */ 
    pthread_attr_init(&attr); 
    /* set scheduling algorithm to process or system */ 
    pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM); 
    /* set scheduling policy -FIFO, RT or OTHERS*/ 
    pthread_attr_setschedpolicy(&attr,SCHED_OTHER); 
    /* create the threads */ 
    for (i=0;i<NUM_THREADS;i++) 
     pthread_create(&tid[i],&attr,runner,NULL); 
    /* join each thread*/ 
    for (i=0;i<NUM_THREADS;i++) 
     pthread_join(tid[i],NULL); 



} 
void *runner(void *param){ 
    printf("I am a thread\n"); 
    pthread_exit(0); 
} 

aber wenn Ich kompiliere das, es sagt mir Läufer ist nicht deklariert, wenn es in pthread_create verwendet wird. Soll das laufen können? mache ich etwas falsch? Wenn es nicht ausgeführt werden soll, wie gehe ich bei der Verwendung dieser API vor? Ich habe mich im Internet umgeschaut und es scheint, dass viele Vorlesungen diese API lehren, aber ich kann nicht herausfinden, wie ich sie benutze. Ich versuche mit dieser API nur ein paar gleichzeitige Threads mit einem zu erstellen von ihnen die Eltern und Druck Sachen mit diesen Themen

+0

Versuchen Sie, den Funktionscode des Läufers vor den Hauptcode zu verschieben – 4386427

Antwort

0

put Sie Definition zu sein funktionieren, bevor die Haupt:

void *runner(void *param); 

Läufer Andernfalls bei der Kompilierung nicht, weil Sie es definieren am Ende definiert ist.

Durch die Definition oben und die Implementierung unten wird das Problem gelöst. (Sie könnten auch einfach Ihre Funktionsimplementierung auf die Hauptfunktion setzen)