考虑这个简单的代码:
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/