Я полагал, что моя программа должна работать так: 1) инициализирует неназванный семафора со значением = 0 второе значение для sem_init
(..) 1 так, как это сказано в MAN семафор разделяемой между процессами 2) создание ребенка, ребенок ждет, пока значение семафора не станет 1семафор беда POSIX
родительский процесс увеличивает значение семафора поэтому ребенок должен выйти в настоящее время , но не выходит на самом деле, так что проблема
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <semaphore.h>
pid_t child;
void child_proc(sem_t* sem) {
sem_wait(sem);
printf("OK\n");
}
void parent_proc(sem_t* sem) {
sem_post(sem);
sleep(2);
int status;
waitpid(child, &status, 0);
}
int main(int argc, char* argv[]) {
sem_t sem;
sem_init(&sem, 1, 0);
child = fork();
if (0 == child) {
child_proc(&sem);
return 0;
}
parent_proc(&sem);
return 0;
}
Должен ли я использовать собственный блок памяти для себя и положить sem_t в него? – NinjaTurtle
@NinjaTurtle, да, это в значительной степени то, что вам нужно делать. – zneak
Хорошо, после этого у меня есть еще одна проблема: человек говорит, что (http://man7.org/linux/man-pages/man2/msync.2.html) общие данные должны обновляться после каждого изменения, поэтому мне нужно для вызова «msync()» после каждого действия семафора, да? :( – NinjaTurtle