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()?
提前致谢。
如果您谈论的是分配的内存,是的。当进程退出时,分配给该进程的所有虚拟内存页都会返回到系统,这将清理进程内分配的所有内存。
一般来说,操作系统应该在退出时清理与进程相关的所有资源。它将处理关闭文件句柄(可以包括套接字和 RPC 机制)、擦除堆栈以及清理任务的内核资源。
简短的回答是,如果操作系统在进程后没有清理,那么这是操作系统中的一个错误。但我们没有人编写有缺陷的软件,对吗?