gpt4 book ai didi

c - C 中的 "thread fork"(理想情况下是 POSIX,但仅适用于 Linux)

转载 作者:IT王子 更新时间:2023-10-29 01:03:24 25 4
gpt4 key购买 nike

是否有任何库/pthread 包装器/clone允许我拥有 tfork 的参数--类似fork()的东西, 允许您在上下文中继续执行代码,而不是指向在新线程下执行的新函数。

如果没有,有什么简单的方法自己写吗?


理想情况下,用法就像 fork 一样,但含义类似于 threadlike,举个人为的例子:

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);
}
}
}

应该输出:

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.

最佳答案

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

当然两个线程需要有自己的栈,否则会出问题。

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

关于c - C 中的 "thread fork"(理想情况下是 POSIX,但仅适用于 Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6230545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com