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)
你不能这样做,因为线程共享相同的地址空间.继续从相同的执行上下文(如fork()做)将意味着他们的堆栈在同一个内存中.
当然,两个线程需要拥有自己的堆栈,否则会发生故障.
这就是为什么你需要指定一个函数来启动一个新线程 - 因为新线程有一个新的堆栈.