En versiones anteriores del estándar POSIX, el primer método con un inicializador solo está garantizado para trabajar con variables asignadas estáticamente, no cuando la variable es una autovariable definida en el cuerpo de una función. Aunque nunca he visto una plataforma donde esto no esté permitido, incluso para autovariables, y esta restricción se ha eliminado en la última versión del estándar POSIX.
La staticvariante es realmente preferible si se puede, ya que permite escribir código bootstrap mucho más fácilmente. Siempre que, durante el tiempo de ejecución, ingrese un código que utilice dicho mutex, puede estar seguro de que el mutex está inicializado. Esta es una información valiosa en un contexto de subprocesos múltiples.
El método que usa una función init es preferible cuando necesita propiedades especiales para su mutex, como ser recursivo, por ejemplo, o ser compartible entre procesos, no solo entre subprocesos.