pthread_t single_thread ;
pthread_create (&single_thread , NULL , &mywriter , 0) ;
void * ignore ;
pthread_join (single_thread , &ignore) ;
我上面有這段代碼,定義void * ignore的目的是什麼,並且加入它呢? 使用它時出現分段錯誤。將指針傳遞給void *到pthread_join的目的是什麼?
pthread_t single_thread ;
pthread_create (&single_thread , NULL , &mywriter , 0) ;
void * ignore ;
pthread_join (single_thread , &ignore) ;
我上面有這段代碼,定義void * ignore的目的是什麼,並且加入它呢? 使用它時出現分段錯誤。將指針傳遞給void *到pthread_join的目的是什麼?
第二個參數的要點是從線程獲取返回的參數。
就像退出代碼。但是因爲這也可能是你要返回的對象的地址,所以你可以修改void*
。如果你看看簽名,它實際上是一個void**
,函數期望你傳遞給它。
如果你不需要它,因爲我認爲你的情況。只是通過null
在從一個成功的在pthread_join()返回一個非NULL value_ptr論證,通過了終止線程了pthread_exit()的調用值在由value_ptr引用的位置提供。
以及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;
}
的pthread_join
的主要目的是同步調用線程與被調用線程。調用線程被掛起,直到被調用的線程退出。
例如,您可以從主函數調用pthread_create
並創建線程。如果不等待線程退出,則主函數/進程將退出,從而將創建的線程連同它一起殺死,而不管它是否完成其工作。
同樣如註釋中所述,您可以將NULL
作爲第二參數傳遞給pthread_join
。使用未初始化的指針通常會導致分段錯誤。另外,我很好奇,你怎麼能夠使用(取消引用)ignore
這是一個void
指針?可能是你鑄造的?
這並沒有任何意義。只需傳遞NULL作爲第二個參數,而不是未初始化的指針。 – Corbin