Эта линия в вилке (doc) человек получил мое внимание:Какой ребенок не наследует настройки семафора от своего родителя (semop (2))?
- Ребенок не наследует семафор корректировки от своего родителя (semop (2)).
Что это значит?
Эта программа (код ниже) не печатать бы «Конец (ребенка)»:
#define SVID_SOURCE 1
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(int argc, char **argv) {
struct sembuf operation;
int semid = semget (getpid(), 1, 0666 | IPC_CREAT);
semctl (semid, 0, SETVAL, 1);
if (fork() == 0) {
sleep(1); // Let the father do semop()
operation.sem_num = 0;
operation.sem_op = -1;
operation.sem_flg = 0;
semop (semid, &operation, 1);
printf("End (child).\n");
exit(0);
}
operation.sem_num = 0;
operation.sem_op = -1;
operation.sem_flg = 0;
semop (semid, &operation, 1);
wait (NULL);
printf("The end.\n");
return 0;
}
В принципе, семафорные настройки сбрасываются в дочернем элементе. – fuz
Ясное объяснение или пример будет действительно полезным – issathink
Почему, по вашему мнению, код будет печатать 'End (child) .'? Какое значение, по вашему мнению, имеет семафор, когда ребенок пытается его _semop() _ и почему вы думаете, что это будет успешным? – pilcrow