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

Met*_*est 5 c linux multithreading fork

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

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

osg*_*sgx 3

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

do_fork()系统调用只是不从线程复制任何其他线程,该线程执行系统调用do_fork -> copy_process并且在第 1181行有一个对 copy_thread 的调用

retval = copy_thread(clone_flags, stack_start, stack_size, p, regs);
Run Code Online (Sandbox Code Playgroud)

  • 如果有“getcontext”,是否也有“setcontext”?两者兼而有之似乎毫无意义。 (2认同)
  • 除了CPU状态之外,线程组结构也丢失了。基本上,在 fork() 之前有几个 task_struct,在 fork() 之后只有一个。创建task_struct类似于clone(CLONE_THREAD),但您仍然需要恢复CPU状态。 (2认同)