title: Unexpected Output Running Semaphore
body: <p>The first process shouldn't start its (i)th iteration unless the second process has finished its (i-1)th iteration.The output is not what I need.I wonder if it is possible to have the output by only two semaphores?
  Here is my code.</p>
  
  <pre><code>#include &lt;stdio.h&gt;   
  #include &lt;sys/types.h&gt;
  #include &lt;unistd.h&gt;  
  #include &lt;stdlib.h&gt;  
  #include &lt;errno.h&gt;  
  #include &lt;semaphore.h&gt;
  
  sem_t semA, semB,sem,m;
  
  int main(void)
  {
   int i;
  
     pid_t child_a, child_b,pid2,pid3;
      sem_init(&amp;semA, 0, 1);
      sem_init(&amp;semB, 0, 0);
  sem_init(&amp;m, 0, 0);
  
     child_a = fork();
  //wait();
  
     if (child_a == 0) {
  
  
    //  int j;
  
        pid2 =getpid();
        for (i = 0; i &lt; 5; )
        {
      sem_wait(&amp;semA);
  //sem_wait(&amp;m);
           printf("child1: %d\n", i);
       i++;
       //printf("pid1: %d\n", pid2);
           //printf("--------------------------\n");
           sleep(3);
  //sem_post(&amp;m);
  
  sem_post(&amp;semB);
        }
  }    
     else {
  
     child_b = fork();
  //wait();
      if (child_b == 0) {
  
        pid3 =getpid();
        for (i = 0; i &lt; 5;)
        {
  sem_wait(&amp;semB);
  //sem_wait(&amp;m);
           printf("child2: %d\n", i);
   i++;
           //printf("pid2: %d\n", pid3);
           //printf("--------------------------\n");
           sleep(5);
  //sem_post(&amp;m);
  sem_post(&amp;semA);
  
        }
  
      } 
      }
  
      exit(0);
     return 0;
  }
  </code></pre>
  
  <p>the output I expect is:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>but I get just one child:</p>
  
  <pre><code>child1: 0
  </code></pre>
  
  <p>(I'm running UBUNTU 12.10)</p>