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.
malloc()
(ou appartient à un objet alloué).Je voudrais citer ceci de ce livre :
la source
Dans les cas où les attributs mutex par défaut sont appropriés, la macro PTHREAD_MUTEX_INITIALIZER peut être utilisée pour initialiser les mutex.
Si vous souhaitez spécifier des attributs pour le mutex, utilisez l'initialisation dynamique ........
L'effet doit être équivalent à une initialisation dynamique par un appel à pthread_mutex_init () avec le paramètre attr spécifié comme NULL, sauf qu'aucune vérification d'erreur n'est effectuée.
la source