2013-11-23 197 views
-2

我使用LINUX 10.04我認爲這不是問題,無論如何,我有一個 奇怪的錯誤。 對我來說,所有看起來都很完美。 那麼問題是什麼? 對不起,這種格式type.i新來這裏。使用Pthreads奇怪的編譯錯誤

//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); 
} 
} 
+2

編譯器錯誤的確切文本是什麼?猜測,這是關於你的「跑步者」的前向宣言嗎?它應該是'void * runner(void * arg);' – simonc

+1

SO不是代碼評論網站。試着制定一個關於你不明白的具體問題。錯誤消息很重要,它們提供信息,讀取它們,分享它們。 –

+0

GCC打印的: pthread_ex_book_pg193.c:在函數 '主': pthread_ex_book_pg193.c:25:警告:從兼容的指針類型 /usr/include/pthread.h:225傳遞 '在pthread_create' 的參數3:注:期望'void *(*)(void *)',但參數的類型爲'void *(*)(void **)' pthread_ex_book_pg193.c:頂級: pthread_ex_book_pg193.c:30:錯誤:衝突'runner'的類型 pthread_ex_book_pg193.c:12:note:之前的'runner'聲明在這裏 nkbaroutis @ nkbaroutis-VGN-FW11M:〜/ Cscripts/threads $ – TraffyT

回答

0

變化

void *runner(void *argv[]); 

void *runner(void *argv); 

(1)您與您以後使用亞軍衝突的向前聲明; (2)線程啓動函數的正確簽名是void* f(void*) - IOW它只需要一個指針就可以使指向void的指針數組無效。