使用Pthreads的奇怪编译错误

时间:2013-11-23 16:41:44

标签: c multithreading pthreads posix

我正在使用LINUX 10.04我认为这不是问题,无论如何我有一个 奇怪的错误。 对我来说,所有人都看起 那么问题是什么? 对不起这种格式类型。我是新来的。

   //COMPILE with:  gcc -g -Wall -pthread pthread_ex_book_pg193.c -lpthread -o MYthread  

/* the program is simple.We create two threads One is for the main () and th esecond with the pthread_create().
The second thread calls a function runner()  to calculate a sum and when it finishes it    returns to the main thread */


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


int sum;
void *runner(void *argv[]);
int  main (int argc,char *argv[]){
pthread_t tid; //thread id 
pthread_attr_t attr;//thread attributes
if (argc!=2){
fprintf(stderr,"usage: a.out<integer value> \n");
return -1;
}
if (atoi(argv[1]) < 0){
fprintf(stderr, "%d must be >=0\n ",atoi(argv[1]));
return -1;
}
pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,argv[1]);
pthread_join(tid,NULL);
printf("sum = %d \n",sum);
}

void *runner(void *param){
int i;
int upper = atoi(param); 
sum=0;
for (i=1;i<=upper;i++){
sum=sum+i;
pthread_exit(0);
}
}

1 个答案:

答案 0 :(得分:0)

更改

void *runner(void *argv[]);

void *runner(void *argv);

(1)你的前锋宣战与你以后的使用冲突; (2)线程的启动函数的正确签名是void* f(void*) - IOW它需要一个指向void的单个指针而不是一个指向void的指针数组。