gpt4 book ai didi

C 在具有事件等待的子进程之间共享内存时出错

转载 作者:太空狗 更新时间:2023-10-29 16:10:59 27 4
gpt4 key购买 nike

我正在尝试编写一个在子进程和父进程之间共享内存的程序。该程序还使用 fork 。

练习的目的是:-父亲发送给 child (共享内存)3次主动等待的 vector

- child 收到vec,打印它并改变同步变量

  Struct:
typedef struct{
int change[NUM_TOTAL];
int synchronize;
}Exchange;

Exchange *vec;

int fd = shm_open("/shmtest8",O_CREAT| O_RDWR,S_IRUSR|S_IWUSR);
//Check shm_open error
ftruncate(fd, 100);
vec = (Exchange*) mmap(NULL,100,PROT_READ|PROT_WRITE, MAP_SHARED, fd ,0);

x = forkFunc() //Creates a fork, and return 0 to parente and > 0 to child process
if(x == 0){ //Parent
int cont = 0;

while(cont != 3){
printf("Father\n");
vec->synchronize = 1; //Now go to to the child

while(vec->synchronize!=0); //the child change the variable to 0
cont++;
printf("cont %d",cont);
}


wait(NULL);

munmap(vec,sizeof(vec));
close(fd);
shm_unlink("/shmtest8");


}else if(x > 0){ //Child

int cont = 0;

while(vec->synchronize!=1); //Exit while when father change the variable to 1
int i;

for(i = 0; i < 10; i++){
printf("%d\t",i);
}

vec->synchronize =0; //Return to the father
}

这是一个输出的例子:

     Father
Child
0 1 2 3 4 5 6 7 8 9
cont 1
Father

在第一次迭代之后,程序在“while(vec->synchronize!=0);”之后卡住...我想问题存在于子进程中,但我不知道为什么...有什么想法吗?

谢谢

最佳答案

我认为你的子进程部分应该有 1 个 while 循环

while(cont != 3){
while(vec->synchronize!=1); //Exit while when father change the variable to 1
int i;
for(i = 0; i < 10; i++){
printf("%d\t",i);
}

ec->synchronize =0; //Return to the father
cont++
}

关于C 在具有事件等待的子进程之间共享内存时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36628555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com