【发布时间】:2020-09-09 16:03:10
【问题描述】:
我正在编写一个 C 程序。我已经定义了一个全局变量,其值将从主函数更新。但问题是它没有发生。你能告诉我我做错了什么吗?这是我的代码。
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<signal.h>
#include<sys/wait.h>
extern int DELAY=10;
int DATA1=0;
int DATA2=0;
int main(){
generateData(0);
return 0;
}
void generateData(int x){
int y=x;
int p1,p2;
p1=fork();
p2=fork();
if(p1==0 && p2>0){
for(int i=0;i<3;i++){
printf("p1:%d\n",i);
sleep(1);
if(x==0){
x=1;
DATA1=x;
}
else if(x==1){
x=0;
DATA1=x;
}
// printf("%d\n",DATA1);
// l=DATA1;
printf("DATA1:%d\n",DATA1);
}
}
else if(p2==0 && p1>0){
for(int i=0;i<3;i++){
printf("p2:%d\n",i);
sleep(10);
if(y==0){
y=1;
DATA2=y;
}
else if(y==1){
y=0;
DATA2=y;
}
// m=DATA2;
printf("DATA2:%d\n",DATA2);
}
}
else if(p1>0 && p2>0){
wait(0);
printf("DATA1=%d, DATA2=%d\n",DATA1,DATA2);
kill(p1,SIGKILL);
kill(p2,SIGKILL);
checkTruthTable(DATA1,DATA2);
}
}
int checkTruthTable(int x, int y){
return 0;
}
我想从 generateData 函数更新 DATA1 和 DATA2 的值。当我尝试为第三个 else if 循环打印数据时,它显示我 DATA1=0, DATA2=0
结果:
p2:0
p1:0
DATA1:1
p1:1
DATA1:0
p1:2
DATA1:1
DATA1=0, DATA2=0
【问题讨论】:
-
我已经尝试过了,但我无法调试我做错了什么
-
是的,它正在进入那个循环,这就是为什么它同时打印数据值 Data1 和 Data2 一起打印,这在那个循环中@MohitReddy
-
我的错,是的,父母的第二个孩子将进入第二个街区。我不知道函数
generateData()的逻辑是什么,但是父级执行最后一个 elseif() 块并且您没有在那里更新任何变量。即使孩子更新它也不会反映在父母的记忆中,因为孩子有单独的堆、堆栈、数据部分......等等。参考fork()手册页你会更好地理解。 -
您的意图似乎是并行计算 DATA1 和 DATA2 值。尽管您成功地计算了它们,但您无法将它们存储在父母的记忆中。您需要采用一些 IPC 方法来做到这一点。最好和最简单的是管道。
标签: c