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

时间:2011-07-06 13:25:24

标签: c linux multithreading fork

我知道没有标准的方法来分支多线程进程。但是,我想到的一件事是,由于分叉进程是精确的副本或原始进程,所以线程堆栈就在那里。

有没有人知道如何在分叉进程中从上次执行状态重新启动线程。为简单起见,我们可以假设在分叉时没有获得锁定。比方说,分叉是在两个障碍之间完成的。

3 个答案:

答案 0 :(得分:3)

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

do_fork()系统调用只是不复制线程中的任何线程,执行系统调用do_fork - > copy_processline 1181

只能调用copy_thread
retval = copy_thread(clone_flags, stack_start, stack_size, p, regs);

答案 1 :(得分:1)

猜猜什么? Solaris已经有了这样一个名为 forkall 的功能!很想在Linux上看到它的端口!

答案 2 :(得分:0)

我猜你在谈论continuations。我在google上看到了一些点击(我要求“继续c”),但我不能推荐任何链接,因为我不知道你的具体需求。