As far as I know, this only causes locking around some potentially unsafe system calls. My concern is that we usually don't know whether the user is asking for threads until we have processed run-time options, which is normally done after calling MPI_Init_thread(). Is there a downside to asking for MPI_THREAD_FUNNELED even if only MPI_THREAD_SINGLE semantics will be needed?