簡體   English   中英

創建和內存泄漏后立即分離線程

[英]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線程文檔和以下鏈接中的大弧度

https://computing.llnl.gov/tutorials/pthreads/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM