-1
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?

Lane
  • 387
  • 1
  • 12

0 Answers0