2010-09-09 8 views
0

Dans ce qui suit mutex code d'est initialized.what est la signification de NULL.Mutex Initialisation - (UNIX)

pthread_mutex_init(&a->monitor,NULL); 

Je veux savoir pourquoi nous passons NULL comme deuxième paramètre.

+1

Pourriez-vous pas simplement lire les pages de manuel pour pthread: http://www.rootr.net/man/man/pthread_mutex_init/3 –

+0

@Martin York-Merci pour l'info.Je garderai cela à l'esprit la prochaine fois . – Pavitar

Répondre

6

Le deuxième argument est un pointeur vers une structure pthread_mutexattr_t, qui vous permet de modifier le comportement du mutex; NULL signifie "aucune option spéciale ici, utilisez le comportement mutex par défaut." La plupart des options de mutex ne sont utiles que dans les cas marginaux (éviter les interblocages par inversion de priorité, partager un mutex entre processus plutôt qu'avec des threads) et les plus utiles (ex: récursivité) ne sont standardisés que dans la version 2008 de POSIX. signifie que vous ne pouvez pas encore compter sur leur existence multiplateforme. La réponse de paxdiablo a une liste complète.

+0

@ Zack- Thankyou – Pavitar

+1

Il existe une liste dans la spécification [POSIX 'pthreads.h'] (http://www.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html) - voir les fonctions commençant par 'pthread_mutexattr_' – caf

+0

Ils ne sont pas mal normalisés, IEEE/OG est à la hauteur des normes ISO. Et la plupart du temps, ce n'est pas utile, vous avez raison à ce sujet. Mais il y a des utilisations pour eux, aussi edgecase ils peuvent être. – paxdiablo

2

Le deuxième argument de pthread_mutex_init prend l'argument pthread_mutexattr_t comme argument. Vous pouvez utiliser le deuxième argument pour spécifier les attributs du mutex et si ses attributs mutex par défaut NULL sont utilisés.

4

NULL, en tant qu'attribut mutex, vous donne un attribut par défaut défini par l'implémentation. Si vous voulez savoir ce que vous pouvez faire avec les attributs, consultez le following reference et suivez les liens pthread_mutexattr_* dans la section SEE ALSO.

Ceci est pour le numéro 7 de la norme, 1003.1-2008. Le point de départ pour cela est here. En cliquant sur Headers en bas à gauche, vous pourrez accéder aux fonctionnalités spécifiques (y compris pthreads.h).

Les attributs permettent de définir ou obtenir:

  • la type (interblocage, impasse-détection, récursif, etc.).
  • le robustness (que se passe-t-il lorsque vous acquérez un mutex et que le propriétaire d'origine est mort en le possédant).
  • le process-shared attribute (pour partager un mutex à travers les limites de processus).
  • le protocol (comment un thread se comporte en termes de priorité lorsqu'un thread de priorité plus élevée veut le mutex).
  • le priority ceiling (la priorité à laquelle la section critique sera exécutée, un moyen d'empêcher l'inversion de priorité).

Et, bien sûr, il y a aussi le init and destroy calls, qui n'est pas directement lié à un attribut spécifique mais utilisé pour les créer.