考虑以下简单代码:
int myvar = 0; int main() { if (fork()>0) { myvar++; } else { // father do nothing } }
当child增加myvar时,该值是否与父亲共享(如pthread)?
不,是的。
不,它们不会以程序员可见的任何方式共享;进程可以独立地修改自己的变量副本,并且它们将在不影响其他进程(例如fork()父,兄弟姐妹或后代)的情况下进行更改。
但是,是的,OS实际上最初确实共享页面,因为fork实现了写时复制功能,这意味着只要没有任何进程修改页面,就可以共享页面。但是,这是可以忽略的优化。
如果您要使用共享变量,请将它们放在匿名共享映射中(请参阅mmap()),在这种情况下,它们确实会被共享,并附带所有警告。