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.