В более старых версиях стандарта POSIX первый метод с инициализатором гарантированно работает только со статически распределенными переменными, а не тогда, когда переменная является autoпеременной, которая определена в теле функции. Хотя я никогда не видел платформы, где это было бы запрещено даже для autoпеременных, и это ограничение было снято в последней версии стандарта POSIX.
staticВариант действительно предпочтительнее , если вы можете, так как он позволяет писать код начальной загрузки гораздо проще. Всякий раз, когда во время выполнения вы вводите код, который использует такой мьютекс, вы можете быть уверены, что мьютекс инициализирован. Это ценная информация в контексте многопоточности.
Метод, использующий функцию инициализации, предпочтительнее, когда вам нужны специальные свойства для вашего мьютекса, такие как рекурсивность, например, или совместное использование между процессами, а не только между потоками.