/* * This is a sample usage of semaphores for parent-child coordination. * To compile: * * g++ -lpthread semaphores.cpp -o semaphores */ #include #include #include #include #include #include #include sem_t * sem_id; static void parent(void) { sem_id=sem_open("somesem", O_CREAT, 0600, 0); if(sem_id == SEM_FAILED) { perror("parent sem_open"); return; } printf("waiting for child\n"); if(sem_wait(sem_id) < 0) { perror("sem_wait"); } } static void child(void) { sem_id=sem_open("somesem", O_CREAT, 0600, 0); if(sem_id == SEM_FAILED) { perror("child sem_open"); return; } printf("Posting for parent\n"); if(sem_post(sem_id) < 0) { perror("sem_post"); } } int main(int argc, char *argv[]) { pid_t pid; pid=fork(); if(pid < 0) { perror("fork"); exit(EXIT_FAILURE); } if(!pid) { sleep(1); child(); } else { int status; parent(); wait(&status); } sem_close(sem_id); sem_unlink("somesem"); return 0; }