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

考虑这个简单的代码:

 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/

相关文章:

linux - 用于将文件夹从本地计算机复制到远程服务器的 scp 命令语法

linux - 在所有子目录上使用 wc 来计算行数

linux - 使远程目录保持最新

linux - docker-compose up 导致 "client and server do

linux - 命令行 Arduino 编译和上传?

php - 如何运行我所有的 PHPUnit 测试?

c++ - 从线程内 fork 是否安全?

java - 无法在 Android Studio 中清理项目

linux - 如何在 Unix 中获取 GMT 时间?

linux - 如何找到只对所有者具有特定权限的文件?