In both cases the Mutex constructor will be called when the function is first called. In both cases the function needs external protection from MT race conditions.
On a side note, this function is not on the interface (Mt.h), why not make it file static in Mt.cpp to avoid name clashes?
I think you are basically right. This was attempt to make more sure that initialization really happens and there is not catch, because external protection is not possible there.... as this is a mutex used to protect synchronization of other mutexes..
So the whole thing is meant to be run before second thread starts (and it is called in several places to ensure this).
I guess it is still better this way, as you never know what really happens in "static magic".