无法编译pthread调度API

时间:2016-10-15 18:32:51

标签: c pthreads cpu scheduling

所以在我的讲座中,我的教授给了我们一些我们需要在下一个作业中使用的代码,它的标题是Pthread调度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中使用它时未声明runner。这应该能够运行吗?难道我做错了什么?如果它不应该运行如何使用此API?我在互联网上环顾四周,似乎有很多讲座教授这个API,但我无法找到如何使用它,我试图用这个API做的只是创建一些并发线程,其中一个是父线程和打印这些线程的东西

1 个答案:

答案 0 :(得分:0)

在main之前输入函数定义:

void *runner(void *param);

否则,在编译时,未定义runner,因为您最后定义了它。

将定义放在最上面,将实现置于底部将解决问题。 (你也可以把你的函数实现放在主要的顶部)