Quinn's "Parallel Programming in C with MPI and OpenMP" offers many examples of different ways to distribute data in parallel programming. There's even a decision tree that helps you understand which approach is most convenient, depending on your needs.