Я написал 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
......
Если требуется какая-либо информация, оставьте комментарий ниже.