2013-01-31 53 views
-2

我想學習C語言中的多線程編程並試圖理解基本程序。我無法理解runner函數,爲什麼它返回一個指向void類型的指針並傳遞一個參數,該參數也是void指針。另外,我無法理解main的參數。C語言中使用Pthread的基本多線程程序說明

int sum;/this data is shared by the thread(s) 
void *runner(void *param);/the thread 
int main(int argc, char *argv[]) 
{ 
pthread_t tid;/the thread identifier/
pthread.attr_t attr;/set of 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; 
/get the default attributes/
pthread.attr.init (&attr) ; 
/create the thread/
pthread^create(&tid,&attr,runner,argv[1]); 
/wait for the thread to exit/
pthread_join (tid, NULL) ; 
printf("sum = %d\n",sum); 
/The thread will begin control in this function/
void *runner(void *param) 
{<br /> 
int i, upper = atoi(param); 
sum = 0;<br /> 
for (i = 1; i <= upper; i 
sum += i; 
pthread_exit (0) ; 
+0

請查看http://stackoverflow.com/editing-help#code - 這需要更清晰地格式化。 – djechlin

+0

請以易於理解的方式修復代碼 –

+0

這裏似乎沒有具體問題。請在瀏覽網頁時尋找解釋。網絡上有很多。 –

回答

0

首先參數爲mainargc是命令行參數的數量,包括程序名稱。 argv是指向零分隔字符串的指針數組,這些參數本身就是參數。所以,如果你在命令行這樣運行程序:

myprog x y z 

然後argc將是4,argv看起來就像這樣:

argv[0]: "myprog" 
argv[1]: "x" 
argv[2]: "y" 
argv[3]: "z" 
argv[4]: "" 

的最後一個元素應該是一個空字符串。第一個元素(程序名稱)的確切格式取決於操作系統和程序調用的確切方式。

您的runner函數是一種函數,有時通常稱爲回調。它由其他人(pthread庫)調用。爲了讓別人調用你的函數,它必須知道它的返回類型和參數,所以這些都是固定的,即使它們沒有被使用。

所以runner必須返回一個void *(無類型指針),並採取void *參數,即使它實際上並未使用任何(它可以返回NULL)。就是這樣,因爲這是pthread庫期望的。