Hi all,
For the following code I want to stop early completing processes and wait for the others at the point with  (world.barrier)();   statement.
But the problem is stop- and stop+ do interleave. Am I doing something wrong with the synchronization, or there is something wrong with my code?


if (world.rank() == MASTER){    
        m_mySize = n / world.size() + n % world.size();   
        w_mySize = n / world.size();
        for(int p = 1; p < world.size(); p++){
            world.send(p, 1, w_mySize);       
            world.send(p, 2, n);       
        }           
          relMyValues = new possibleClause[w_mySize];       
          scatter(world, pC, relMyValues, w_mySize, 0);       
      }
      else{         
          world.recv(0, 1, w_mySize);
          relMyValues = new possibleClause[w_mySize];
          scatter(world, pC, relMyValues, w_mySize, 0);
         
      }
     
    for(i = 0; i < w_mySize; i++){
       //do something
    }
   
    cout << world.rank() << " stop - " << world.rank() << endl;   
    (world.barrier)();   
    cout << world.rank() << " stop + " << world.rank() << endl;   

    if (world.rank() == MASTER){   
          relAllValues = new possibleClause[n - n % world.size()];       
          gather(world, relMyValues, w_mySize, relAllValues, 0);         
    }
    else{
        world.recv(0, 2, n);
        gather(world, relMyValues, w_mySize, relAllValues, 0);
    }