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.
malloc()
(o pertenece a un objeto que está asignado).Me gustaría citar esto de este libro :
fuente
En los casos en los que los atributos de exclusión mutua predeterminados son apropiados, la macro PTHREAD_MUTEX_INITIALIZER se puede utilizar para inicializar las exclusiones mutuas.
Si desea especificar atributos para mutex, vaya con inicialización dinámica ........
El efecto será equivalente a la inicialización dinámica mediante una llamada a pthread_mutex_init () con el parámetro attr especificado como NULL, excepto que no se realizan comprobaciones de errores.
fuente