Добрый день, подскажите что в этой программе не так?(нужно использовать семафоры для взаимного исключения)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <errno.h>
#include <sys/sem.h>
const int INC_DEC = 500000;
int main() {
int shmid = 777,semid;
int *array;
char pathName[] = "program6_2_7.c";
int var = 0;
int new=1;
key_t key;
struct sembuf mybuf;
if ((key = ftok(pathName,0)) < 0)
{
printf("can't generate key\n");
return -1;
}
if ((shmid = shmget(key, 1*sizeof(int), 0666 | IPC_CREAT | IPC_EXCL))< 0)
{
if (errno != EEXIST)
{
printf("Cant create shared memory1\n");
exit(-1);
}
else
{
if ((shmid = shmget(key, 1*sizeof(int),0))< 0)
{
printf("Cant create shared memory2\n");
exit(-1);
}
}
if ((array = (int*)shmat(shmid, NULL,0)) == (int*)(-1))
{
printf("Cant attach shared memory\n");
exit(-1);
}
}
semid = semget(key,1,0666 | IPC_CREAT);
mybuf.sem_op = 0;
mybuf.sem_flg = 0;
mybuf.sem_num = 0;
array[0] = var;
int f = fork();
if (f > 0)
{
semop(semid, &mybuf,1);
for (int i = 0; i < INC_DEC; ++i)
{
array[0]-=1;
mybuf.sem_op=-1;
semop(semid, &mybuf,1);
}
printf("Parent dec var = %d", array[0]);
}
else
{
semop(semid, &mybuf,1);
for (int i = 0; i < INC_DEC; ++i)
{
array[0]+=1;
mybuf.sem_op=1;
semop(semid, &mybuf,1);
}
printf("Child inc var = %d",array[0]);
}
return 0;
}