c - Unexpected Output Running Semaphore -
i'm trying write program forks process , stays in sync first process doesn't start (i)th iteration until second process has finished (i-1)th iteration. possible using 2 semaphores? have far:
#include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <semaphore.h> sem_t sema, semb,sem,m; int main(void) { int i; pid_t child_a, child_b,pid2,pid3; sem_init(&sema, 0, 1); sem_init(&semb, 0, 0); sem_init(&m, 0, 0); child_a = fork(); //wait(); if (child_a == 0) { // int j; pid2 =getpid(); (i = 0; < 5; ) { sem_wait(&sema); //sem_wait(&m); printf("child1: %d\n", i); i++; //printf("pid1: %d\n", pid2); //printf("--------------------------\n"); sleep(3); //sem_post(&m); sem_post(&semb); } } else { child_b = fork(); //wait(); if (child_b == 0) { pid3 =getpid(); (i = 0; < 5;) { sem_wait(&semb); //sem_wait(&m); printf("child2: %d\n", i); i++; //printf("pid2: %d\n", pid3); //printf("--------------------------\n"); sleep(5); //sem_post(&m); sem_post(&sema); } } } exit(0); return 0; }
the output expect is:
child1: 0 child2: 0 child1: 1 child2: 1 child1: 2 child2: 2 child1: 3 child2: 3 child1: 4 child2: 4 child1: 5 child2: 5 child1: 6 child2: 6 child1: 7 child2: 7 child1: 8 child2: 8 child1: 9 child2: 9
but 1 child:
child1: 0
you may need three semaphores
.
sem1 sem2 sem3
process1:
if(firstrun){ initialize semaphores wait sem2 } post sem1 wait sem3
process2:
if(firstrun){ initialize semaphores post sem2 } wait sem1 post sem3
note: in initialize semaphores
have map semaphores shared memory
accessible both processes. initialize them default value 0, 0, 0
.
Comments
Post a Comment