进程退出时是否自动清理pthreads占用的资源

rag*_*276 6 c c++ linux pthreads

假设我有一个类似这样的代码:

void *my_thread(void *data)
{
    while (1) { }
}

void foo_init(struct my_resource *res)
{
    pthread_create(&res->tid, NULL, my_thread, res);

    /* Some init code */
}

void foo_exit(void)
{
    /* Some exit code */
}
Run Code Online (Sandbox Code Playgroud)

场景是这样的。当进程初始化时,foo_init()将使用指向我分配的资源的指针来调用该函数(分配是由其他函数自动完成的,该函数不受我的控制)。在函数中,我创建了一个pthread,它在无限循环中运行。

一段时间后,当进程即将终止时,该函数foo_exit()被调用,但这次没有指向我的资源的指针,因此我无法调用pthread_join(),因为 mytid包含在my_resource结构中。

现在我的问题是,与操作系统相关的资源是否pthreads会在操作系统终止进程时被销毁?如果是的话,我该如何确定。

另外,在不调用的情况下终止进程是否安全pthread_join()

提前致谢。

Bea*_*anz 4

如果您谈论的是分配的内存,是的。当进程退出时,分配给该进程的所有虚拟内存页都会返回到系统,这将清理进程内分配的所有内存。

一般来说,操作系统应该在退出时清理与进程相关的所有资源。它将处理关闭文件句柄(可以包括套接字和 RPC 机制)、擦除堆栈以及清理任务的内核资源。

简短的回答是,如果操作系统在进程后没有清理,那么这是操作系统中的一个错误。但我们没有人编写有缺陷的软件,对吗?