У меня есть эта программа на C ++, которая разветвляет два новых процесса:
#include <pthread.h>
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstdlib>
using namespace std;
int shared;
void func(){
extern int shared;
for (int i=0; i<10;i++)
shared++;
cout<<"Process "<<getpid()<<", shared "
<<shared<<", &shared "
<<&shared<<endl;
}
int main(){
extern int shared;
pid_t p1,p2;
int status;
shared=0;
if ((p1=fork())==0) {func();exit(0);};
if ((p2=fork())==0) {func();exit(0);};
for(int i=0;i<10;i++)
shared++;
waitpid(p1,&status,0);
waitpid(p2,&status,0);;
cout<<"shared variable is: "<<shared<<endl;
cout<<"Process "<<getpid()<<", shared "
<<shared<<", &shared "
<<&shared<<endl;
}
Два разветвленных процесса увеличивают общие переменные, а родительский процесс делает то же самое. Поскольку переменная принадлежит сегменту данных каждого процесса, конечное значение равно 10, поскольку приращение не зависит.
Тем не менее, адрес памяти общих переменных остается тем же, вы можете попробовать скомпилировать и просмотреть выходные данные программы. Как это можно объяснить? Я не могу этого понять, я думал, что знаю, как работает fork (), но это кажется очень странным ..
Мне нужно объяснить, почему адрес такой же, хотя они являются отдельными переменными.