重新启动分叉进程中的线程



我知道没有标准的方法来分叉多线程进程。然而,我想到了一件事,那就是由于分叉进程是原始进程的副本,所以线程堆栈应该在那里。

有谁知道如何在fork进程中从上一次执行状态重新启动线程吗?为简单起见,我们可以假设分叉时没有获得锁。例如,在两个屏障之间进行分叉。

线程的执行状态不仅仅是堆栈中的数据。它也是一组丢失的CPU寄存器。

do_fork()系统调用只是不复制任何线程从线程,它执行一个系统调用do_fork -> copy_process和有一个单独的调用copy_thread在第1181行

retval = copy_thread(clone_flags, stack_start, stack_size, p, regs);

你猜怎么着?Solaris已经有了这样一个函数,它的名字是forkall!希望看到它在Linux上的移植!

我猜你说的是延续。我在谷歌上看到了一些链接(我问的是"continuation c"),但我不能推荐任何链接,因为我不知道你的具体需求。

最新更新