[英]Detach thread right after creation and memory leaks
我正在嘗試創建一個分離的線程,所以我不需要釋放為它分配的內存。 Valgrind用於檢查內存泄漏。 我使用過IBM的例子並寫了:
void *threadfunc(void *parm)
{
printf("Inside secondary thread\n");
return NULL;
}
int main(int argc, char **argv)
{
pthread_t thread;
int rc=0;
rc = pthread_create(&thread, NULL, threadfunc, NULL);
sleep(1);
rc = pthread_detach(thread);
return 0;
}
這有效並且不會造成泄漏,但是沒有“sleep(1)”的版本; 沒有。 為什么需要睡眠(1)?
我正在嘗試創建一個分離的線程,所以我不需要釋放為它分配的內存。
在這種情況下,不需要pthread_detach (),因此不應使用。 另外,在這段代碼中你沒有做過任何明顯的內存分配,所以你不必擔心釋放內存。
為什么需要睡眠(1)?
創建新線程時,父線程和子線程可以按任何順序開始執行。 它取決於操作系統調度和其他因素。 現在,在這種情況下,如果首先調度父線程,那么它可能會在子線程開始執行之前進入並退出程序。
通過在父上下文中添加sleep,子線程有時間開始並在完成之前完成執行。 但這不是一個好主意,因為我們不知道子線程需要花多少時間。 因此pthread_jon()應該在父上下文中使用。 有關詳細信息,請參閱POSIX線程文檔和以下鏈接中的大弧度
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.