Общая память, дающая неоднозначные результаты - PullRequest
0 голосов
/ 06 января 2019

Я пытался установить связь между двумя процессами, используя концепцию общей памяти. Но здесь, хотя я указывал адреса общей памяти разных переменных на разные файлы, они, похоже, связаны. Как только я изменяю значение одной переменной, новое значение также перезаписывается на другую переменную, в этом случае se1-> val и se2-> val выходят на связь. Может кто-нибудь помочь, почему так происходит?

#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#define s(t) scanf("%d",&t)
#define p(t) printf("%d ",t)
struct sem
{
    int val;
    int xy;
};
struct sem* se1;
struct sem* se2;
int main()
{
    printf("You in P1\n");
    key_t key1,key2;
    key1=ftok("shmfile1",0);
    key2=ftok("shmfile3",0);
    int shmid1=shmget(key1, sizeof(struct sem),0644|IPC_CREAT);
    int shmid2=shmget(key2, sizeof(struct sem),0644|IPC_CREAT);
    se1=shmat(shmid1,NULL,0);
    se2=shmat(shmid2,NULL,0);
    se1->xy=4;
    se2->xy=8;
    se1->val=0;
    se2->val=1;
    int r=10;
    while(r--)
    {
        printf("\nIn P1 process ");
        while(se2->val==0);
        se2->val--;
        se1->xy=se2->xy+1;
        se1->val++;
        p(se1->xy);
        p(se2->xy);
    }
    return 0;
}

Ожидается, что se1-> val и se2-> val приведут к результатам типа семафора, но из-за перезаписи это не происходит!

...