C中的"thread fork"(理想情况下是POSIX,但只是Linux工作)

Aar*_*ken 3 c unix linux multithreading posix

是否有任何库/ pthread包装器/ clone参数可以让我有一些tfork东西,就像fork()允许你继续在上下文中执行代码一样,而不是指向一个新函数在新线程下执行.

如果没有,有没有简单的方法来自己写这个?


用法在理想情况下就像fork一样,但意思是线程的,所以作为一个人为的例子:

int main() {
        int ival = 0;
        if(tfork() == 0) {
                sleep(10);
                ival = 5;
                _exit(); // or exit or return or whatever
        } else {
                while(1) {
                        printf("ival=%d\n", ival);
                        if(ival != 0) {
                                printf("ival changed. done.\n");
                                return 0;
                        }
                        sleep(1);
                }
        }
}
Run Code Online (Sandbox Code Playgroud)

应输出:

ival=0
ival=0
ival=0
ival=0
ival=0
ival=0
ival=0
ival=0
ival=0
ival=0
ival=5
ival changed. done.
Run Code Online (Sandbox Code Playgroud)

Mar*_*rkR 5

你不能这样做,因为线程共享相同的地址空间.继续从相同的执行上下文(如fork()做)将意味着他们的堆栈在同一个内存中.

当然,两个线程需要拥有自己的堆栈,否则会发生故障.

这就是为什么你需要指定一个函数来启动一个新线程 - 因为新线程有一个新的堆栈.