Por versões mais antigas do padrão POSIX, o primeiro método com um inicializador só funciona com variáveis alocadas estaticamente, não quando a variável é uma auto
variável definida em um corpo de função. Embora eu nunca tenha visto uma plataforma onde isso não seria permitido, mesmo para auto
variáveis, e essa restrição foi removida na versão mais recente do padrão POSIX.
A static
variante é realmente preferível se você puder, uma vez que permite escrever código de bootstrap muito mais facilmente. Sempre que, em tempo de execução, você inserir um código que usa esse mutex, pode ter certeza de que o mutex foi inicializado. Esta é uma informação preciosa no contexto de multi-threading.
O método usando uma função init é preferível quando você precisa de propriedades especiais para seu mutex, como ser recursivo, por exemplo, ou ser compartilhável entre processos, não apenas entre threads.
malloc()
(ou pertencer a um objeto alocado).Eu gostaria de citar este livro :
fonte
Nos casos em que os atributos mutex padrão são apropriados, a macro PTHREAD_MUTEX_INITIALIZER pode ser usada para inicializar mutexes.
Se você deseja especificar atributos para mutex vá com inicialização dinâmica ........
O efeito deve obrigatoriamente ser equivalente à inicialização dinâmica por uma chamada a pthread_mutex_init () com o parâmetro Attrspecified como NULL, exceto que nenhuma verificação de erro é realizada.
fonte