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