Dans les anciennes versions de la norme POSIX, la première méthode avec un initialiseur est garantie de fonctionner uniquement avec des variables allouées statiquement, pas lorsque la variable est une auto
variable définie dans un corps de fonction. Bien que je n'ai jamais vu une plate-forme où cela ne serait pas autorisé, même pour les auto
variables, et cette restriction a été supprimée dans la dernière version du standard POSIX.
La static
variante est vraiment préférable si vous le pouvez, car elle permet d'écrire du code bootstrap beaucoup plus facilement. Chaque fois qu'au moment de l'exécution, vous entrez dans un code utilisant un tel mutex, vous pouvez être assuré que le mutex est initialisé. Il s'agit d'une information précieuse dans un contexte multi-threading.
La méthode utilisant une fonction init est préférable lorsque vous avez besoin de propriétés spéciales pour votre mutex, comme être récursif par exemple ou être partageable entre processus, pas seulement entre threads.