我试图创建一个分离的线程,因此我不需要释放为其分配的内存。 Valgrind用于检查内存泄漏。 我使用了IBM example并写了:
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;
}
这有效并且不会造成泄漏,但是没有"睡眠的版本(1);"没有按'吨。 为什么需要睡眠(1)?
答案 0 :(得分:3)
我正在尝试创建一个分离的线程,所以我不需要释放它 分配给它的内存。
在这种情况下,不需要 pthread_detach (),因此不应使用。另外,在这段代码中你还没有做任何明确的内存分配,所以你不必担心释放内存。
为什么需要睡眠(1)?
创建新线程时,父线程和子线程可以按任何顺序开始执行。 它取决于操作系统调度和其他因素。现在在这种情况下,如果父线程得到 先调度然后它可能在子线程之前进入并退出程序 开始执行。
通过在父上下文中添加sleep,子线程有时间开始并在完成之前完成执行。但这不是一个好主意,因为我们不知道子线程需要花多少时间。因此, pthread_jon()应该在父上下文中使用。有关详细信息,请参阅POSIX线程文档和下面的链接
中的大块