В чем заключается проблема в коде для синхронизации родительского и дочернего процессов с использованием семафоров? - PullRequest
0 голосов
/ 11 февраля 2020

Я написал C программу для синхронизации родительского и дочернего процессов с использованием семафоров.

Вот реализация:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/sem.h>
#include<signal.h>
#include<errno.h>
#include<semaphore.h>
#include<fcntl.h>


int main(int argc, char *argv[])
{
        int pid, n=-1;

        sem_t *p, *c;

        p = sem_open("/parent_semaphore", O_CREAT, 0644, 0);
        c = sem_open("/child_semaphore", O_CREAT, 0644, 1);

        pid=fork();

        if (pid==0)
        {
                while (1)
                {
                        sem_wait(c);
                        n=rand();
                        printf("Child set value of n as %d \n", n);
                        sem_post(p);
                }
        }
        else
        {
                while (1)
                {
                        sem_wait(p);
                        if(n!=-1)
                                n=-1;
                        printf("Parent reset the value of n to -1 \n");
                        sem_post(c);
                }
        }
        return 0;
}

Я не получаю вывод в моем терминале. Для компиляции я использовал gcc -pthread semaphore.c. В чем проблема?

Ожидаемый результат:

Child set value of n as 105
Parent reset the value of n to -1
Child set value of n as 207
Parent reset the value of n to -1
......

Если требуется какая-либо информация, оставьте комментарий ниже.

...