2016-10-15 1 views
1

그래서 내 강의에서 내 교수는 우리에게 우리가 우리의 다음 임무에 사용할 필요가 몇 가지 코드를 준 pthread와 스케줄링 API를 컴파일 할 수 없습니다, 그것은 P 스레드 스케줄링 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); 
} 

컴파일러는 pthread_create에서 사용될 때 러너가 선언되지 않았 음을 알려줍니다. 이게 도망 갈 수 있을까요? 내가 뭔가 잘못하고 있는거야? 실행할 API가없는 경우이 API를 사용하려면 어떻게해야합니까? 나는 인터넷에서 주변을 둘러 보았고 많은 강의가이 API를 가르치는 것처럼 보였지만 사용법을 알 수는 없지만이 API로 수행하려고하는 것은 하나의 스레드와 몇 개의 동시 스레드를 작성하는 것입니다. 그들이 그 스레드와 부모 및 인쇄 재료가되는

+0

주 코드 앞에 러너 기능 코드를 이동 시키십시오 – 4386427

답변

0

넣어 당신은 주 전에 정의 기능 : 당신이 마지막에 정의되어 있기 때문에

void *runner(void *param); 

그렇지 않으면, 컴파일시에 주자가 정의되어 있지 않습니다.

상단에 정의를 삽입하고 하단에 구현하면 문제가 해결됩니다. (당신은 또한 메인 위에 함수 구현을 넣을 수도 있습니다)