2

我有几个简单的问题。如果我在 C 中创建一个新的子线程,在线程完成处理并终止后,请执行以下操作:

  • 内存映射对象“自动”释放?(我知道 C 没有垃圾收集器,但此时孩子已终止)

估计我发的太快了。找到了第二个问题的答案(供将来参考):http ://www.ibm.com/developerworks/linux/library/l-memory-leaks/index.html?ca=drs-

  • 子线程可以返回值给父线程吗?(这可能使用一些常见的例程吗?我知道孩子和父母的内存空间是一样的?)

另外我想提一下操作系统是 POSIX 兼容的。

谢谢, 内科

4

2 回答 2

4

正如您已经发现的那样,第一个问题的答案是“不”。这也适用于在堆上分配的对象。

进程中的线程之间没有父子关系,所以“父线程”是没有意义的。但是,是的,线程可以在退出时返回一个值。线程顶层函数的原型是:

void *function(void *);

观察返回类型是void *. 线程可以返回一个指针(指向任何你喜欢的东西)。此返回值将由等待返回线程完成的任何其他线程使用pthread_join().

于 2012-04-13T15:09:46.413 回答
0

线程退出时不会释放内存、文件句柄、互斥锁等资源。但是,当包含所有这些类型的对象的进程退出时,所有与进程相关的资源都会被释放。

于 2015-06-14T03:29:04.343 回答