多线程分叉

问题描述 投票:0回答:4

fork()函数可以用来复制多线程进程吗?如果是这样,所有线程都会完全相同,如果不是,为什么不呢?如果无法通过 fork 完成复制,有其他函数可以帮我完成吗?

linux multithreading fork
4个回答
27
投票

分叉后,子进程中只有一个线程在运行。这是 POSIX 标准要求。请参阅问题 fork 和现有线程?最佳答案


19
投票

不,子进程只有一个线程。分叉线程进程并非易事。 (请参阅这篇文章线程和 fork():在混合它们之前要三思而后行以获得良好的概述)。

我不知道克隆进程及其所有线程的任何方法,我认为这在 Linux 上是不可能的。


0
投票

没有。

fork 使用自己的线程创建一个新进程,复制文件描述符和虚拟内存。

子进程不与其父进程共享相同的内存。所以这绝对不一样。


0
投票

假设其他线程之一(除执行 fork( ) 的线程之外的任何线程)负责从您的支票帐户中扣除资金。

POSIX 定义了在存在线程的情况下 fork() 的行为,以仅传播分叉线程。

如果其他线程锁定了互斥锁,则该互斥锁将在子进程中被锁定,但锁的所有者将不存在来解锁它。因此,受锁保护的资源将永久不可用。

http://www.doublersolutions.com/docs/dce/osfdocs/htmls/develop/appdev/Appde193.htm

© www.soinside.com 2019 - 2024. All rights reserved.