Я написал эту простую программу, которая создает дочерний процесс и печатает некоторые сообщения внутри:
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/wait.h>
sem_t *init;
int main()
{
init=sem_open("/mysem", O_CREAT, 0644, 1);
pid_t c,c2;
c=fork();
if(c==0){
sem_wait(init);
for(int i=0;i<5;i++){
printf("critical1 \n");
}
}}
Я прочитал, что sem_wait проверяет значение семафора и, если оно больше 0, уменьшает его и продолжает, и если оно равно 0, оно застревает там до тех пор, пока это значение не будет увеличено. Поэтому после инициализации значения семафора равным 1, я ожидаю, что sem_wait продолжить в обычном режиме и не блокировать программу. Однако в этом случае эта программа ничего не печатает и завершает работу (а не просто делает паузу). Что мне не хватает?