gpt4 book ai didi

c - fork 后,全局变量是否共享?

转载 作者:IT老高 更新时间:2023-10-28 12:37:39 26 4
gpt4 key购买 nike

考虑这个简单的代码:

 int myvar = 0;
int main() {
if (fork()>0) {
myvar++;
} else {
// father do nothing
}
}

当child递增myvar时,值是否与父亲共享(如pthread)?

最佳答案

不是和是的。

不,它们不会以程序员可见的任何方式共享;进程可以独立修改它们自己的变量副本,并且它们的变化不会对其他进程(即 fork() 父进程、兄弟进程或后代进程)产生任何明显影响。

但是是的,操作系统最初确实共享页面,因为 fork 实现了写时复制,这意味着如果没有任何进程修改页面,它们是共享的。然而,这是一个可以忽略的优化。

如果您想要共享变量,请将它们放在匿名共享映射中(请参阅 mmap()),在这种情况下,它们确实会被共享,并附带所有注意事项。

关于c - fork 后,全局变量是否共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298678/

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