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 auto
variable definida en el cuerpo de una función. Aunque nunca he visto una plataforma donde esto no esté permitido, incluso para auto
variables, y esta restricción se ha eliminado en la última versión del estándar POSIX.
La static
variante 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.