void shmSemphoreDemo() {
printf("shmSemphoreDemo:\n");
int shmfd = shmget(IPC_PRIVATE, sizeof(sem_t), IPC_CREAT | 0600);
sem_t *sem = (sem_t *)shmat(shmfd, NULL, 0);
sem_init(sem, 0, 0);
printf("parent start\n");
int pid = fork();
if (pid == 0) {
printf("child sleep start\n");
sleep(2);
printf("child sleep end\n");
sem_post(sem);
exit(0);
}
sem_wait(sem);
shmdt(sem);
shmctl(shmfd, IPC_RMID, NULL);
printf("parent end\n");
}
The second parameter pshared
in sem_init(sem, 0, 0)
indicates the semaphore shared between threads or processes. But in the C code above, no matter I set it as 1 or 0, the code can always run as expected:
shmSemphoreDemo:
parent start
child sleep start
# slept 2 seconds here
child sleep end
parent end
Why?