对pthread_create()有一些问题

时间:2017-03-18 14:09:53

标签: c pthreads

人。我在处理C中的pthread_create时遇到了一些麻烦:

以下是源代码:

#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>

int main() {
    int i = 0;
    pthread_t thread;
    pthread_create(&thread, NULL, &helper, &i);
    pthread_join(thread, NULL);
    printf("i is %d\n", i);
    return 0;
}

void *helper(void *arg) {
    int *num = (int *) arg;
    *num = 2;
}

当我使用gcc编译它时,我得到了这种编译错误:

  

错误:使用未声明的标识符'helper'           pthread_create(&amp; thread,NULL,&amp; helper,&amp; i);

有人可以告诉我如何处理最后两个论点吗?

2 个答案:

答案 0 :(得分:1)

当您使用helper(作为pthread_create()的参数)时,编译器无法使用它的定义/声明。

helper()函数定义移到主函数之上,或为helper()提供原型或声明。

此外:

1)演员阵容:

int *num = (int *) arg;

是不必要的。它可能只是:int *num = arg;

2)线程函数helper()应该返回一个指针。除非您打算返回任何值,否则您可以这样做:

return NULL;

最后。这是Pthreads库所必需的。

答案 1 :(得分:0)

我认为有前瞻性声明的问题。在主要功能之前提出声明。

void *helper(void *arg);

在主函数上面定义函数。