[英]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.