I think you got the message exchange between slaves and master right. Mpi starts the number of processors you specified at start up and sets them up for message passing. Any other process you fork or threads you start from there onwards, you will have to manage your self. So if you want to use those processors mpi started again and again for different tasks, the slave processors should be put in an idle loop. Otherwise they will exit after performing one task (remember you can't start them within the program AFAIK). The slaves can continuously poll for messages f.i using MPI_Iprobe , and then check what type of message it is and what data to receive, and then do the required task.

So, as long as my calls to processors are within main(), they will be called? I can let the master processor do all the hard work in setting up the process, before sending the messages via MPI to the other processors?
You can call MPI_Send() from anywhere so that is no problem. If you don't want to overload the master processor with preparation work, then you will have to share that work too using the polling method I mentioned above. Even better is to add one more send - recieve exchange b/n slave and master to share the preparation work as well, since you know the tasks you will execute apriori.
Cheers