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

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -