35 c unix multithreading fork process
如果我有一个使用线程运行的程序并fork()在基于 unix 的系统上调用,线程是否被复制?我知道当前进程的虚拟内存以 1:1 的比例复制到生成的新进程中。我知道线程在进程的虚拟内存中有自己的堆栈。因此,至少也应该复制线程堆栈。但是,我不知道不驻留在虚拟内存中的线程是否还有其他内容,因此不会被复制。如果没有,这两个进程是共享线程还是独立的副本?
Jea*_*nès 31
线程不在 上复制fork()。POSIX 规范说(强调是我的):
fork - 创建一个新进程
一个进程应使用单个线程创建。如果多线程进程调用 fork(),新进程应包含调用线程及其整个地址空间的副本,可能包括互斥锁和其他资源的状态。因此,为了避免错误,子进程可能只执行异步信号安全操作,直到调用 exec 函数之一。
为了规避这个问题,有一个pthread_atfork()功能可以提供帮助。
| 归档时间: |
|
| 查看次数: |
1445 次 |
| 最近记录: |