In reply to Jeff Squyres.

> Isn't that the equivalent of global state (albeit explicit)?

Yes, I'd just rather have it be explicit instead of implicit. Making all the state of MPI explicit has some advantages.

For example the MPI standard could say "all MPI functions are thread unsafe, users can call them from different threads, but only from one thread at a time". That way people that don't need multi-threaded support don't pay for it, those who need it can choose which kind of support they need (since the state is explicit they can decide how they want to synchronize access to it, e.g. via a mutex, timed mutex, ...), and MPI implementations wouldn't have to deal with it.

One could also use this tho build communication libraries on top of MPI that e.g. use a thread pool to handle progress of asynchronous task.