У старих версіях стандарту POSIX перший метод з ініціалізатором гарантовано працює лише зі статично розподіленими змінними, а не тоді, коли змінна є auto
змінною, яка визначена в тілі функції. Хоча я ніколи не бачив платформи, де це не дозволялося б навіть для auto
змінних, і це обмеження було знято в останній версії стандарту POSIX.
static
Варіант дійсно краще , якщо ви можете, так як він дозволяє писати код початкового завантаження набагато простіше. Щоразу, коли під час запуску ви вводите код, який використовує такий мьютекс, ви можете бути впевнені, що мьютекс ініціалізований. Це цінна інформація у багатопотоковому контексті.
Метод, який використовує функцію init, є кращим, коли вам потрібні спеціальні властивості для вашого мьютексу, такі як рекурсивність, наприклад, або можливість спільного використання між процесами, а не лише між потоками.