2012-05-10 95 views
1
pthread_t single_thread ; 
pthread_create (&single_thread , NULL , &mywriter , 0) ; 
void * ignore ; 
pthread_join (single_thread , &ignore) ; 

我上面有這段代碼,定義void * ignore的目的是什麼,並且加入它呢? 使用它時出現分段錯誤。將指針傳遞給void *到pthread_join的目的是什麼?

+0

這並沒有任何意義。只需傳遞NULL作爲第二個參數,而不是未初始化的指針。 – Corbin

回答

2

第二個參數的要點是從線程獲取返回的參數。

就像退出代碼。但是因爲這也可能是你要返回的對象的地址,所以你可以修改void*。如果你看看簽名,它實際上是一個void**,函數期望你傳遞給它。

如果你不需要它,因爲我認爲你的情況。只是通過null

在從一個成功的在pthread_join()返回一個非NULL value_ptr論證,通過了終止線程了pthread_exit()的調用值在由value_ptr引用的位置提供。

人:pthread_join

1

以及pthread_join的目的是「將創建的線程」加入到調用者線程中...... 這可以確保您的線程在進程脫離主要的右大括號之前運行。

如:

//code 
#include <stdio.h> 
#include <pthread.h> 
void *func(void *arg) 
{ 
printf ("inside the thread %d\n",pthread_self()); 
return NULL; 
} 

int main (void) 
{ 
pthread_t tid; 

pthread_create (&tid,NULLm func,NULL); 

pthread_join (tid,NULL); 

return 0; 
} 
1

pthread_join的主要目的是同步調用線程與被調用線程。調用線程被掛起,直到被調用的線程退出。

例如,您可以從主函數調用pthread_create並創建線程。如果不等待線程退出,則主函數/進程將退出,從而將創建的線程連同它一起殺死,而不管它是否完成其工作。

同樣如註釋中所述,您可以將NULL作爲第二參數傳遞給pthread_join。使用未初始化的指針通常會導致分段錯誤。另外,我很好奇,你怎麼能夠使用(取消引用)ignore這是一個void指針?可能是你鑄造的?