Quel est l ' "attribut" d'un mutex pthread?

La fonction pthread_mutex_init vous permet d'indiquer un pointeur vers un attribut. Mais je dois encore trouver une bonne explication de ce que sont les attributs de pthread. J'ai toujours fourni la valeur NULL. Est-il l'utilisation de cet argument?

La documentation, pour ceux d'entre vous qui l'oublier:

PTHREAD_MUTEX_INIT (3) BSD Library Manuel Des Fonctions

PTHREAD_MUTEX_INIT (3)

NOM de pthread_mutex_init -- créer un mutex

SYNOPSIS

 #include <pthread.h>

 int
 pthread_mutex_init(pthread_mutex_t *restrict mutex,
     const pthread_mutexattr_t *restrict attr);

DESCRIPTION La fonction pthread_mutex_init() crée un nouveau mutex, avec des attributs défini avec attr. Si attr est nul, les attributs par défaut sont utilisés.

23
demandé sur casablanca 2010-11-23 04:50:14

4 réponses

le meilleur endroit pour trouver cette information est les pages des normes POSIX.

NULL l'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 des attributs, consultez le suivant la référence et suivre le pthread_mutexattr_* liens SEE ALSO section. Habituellement, la valeur par défaut est un ensemble raisonnable d'attributs, mais il peut varier entre les plates-formes, donc je préfère explicitement créer des Mutex avec des attributs connus (mieux pour la portabilité).

Ceci est pour la septième édition de la norme, 1003.1-2008. Le point de départ pour cela est ici. En cliquant sur Headers en bas à gauche vous permettra de naviguer à des fonctionnalités spécifiques (y compris pthreads.h).

Les attributs permettent de définir ou obtenir:

  • tapez (blocage, blocage de détection, récursive, etc).
  • robustesse (qu'arrive-t-il lorsque vous acquérir un mutex et le propriétaire d'origine est mort, tout en possédant).
  • attribut de processus partagé (pour partager un mutex au-delà des limites du processus).
  • protocole (comment un fil se comporte en termes de priorité lorsqu'un thread de priorité supérieure veut le mutex).
  • plafond de priorité (la priorité à laquelle s'effectuera la section critique, une façon d'empêcher la priorité inversion.)

Et, pour être complet, il y a le init et de détruire les appels ainsi, pas directement lié à un attribut spécifique mais utilisé pour les créer.

34
répondu paxdiablo 2013-07-06 22:51:02

Tous les mutex les attributs sont définis dans un mutex attribut de l'objet par une fonction de la forme:

int pthread_mutexattr_setname(pthread_attr_t *attr, Type t);

Tous les attributs de mutex sont récupérées à partir d'un mutex attribut de l'objet par une fonction de la forme:

int pthread_mutexattr_getname(const pthread_attr_t *attr, Type *t);

où nom et Type sont définis comme dans le tableau ci-dessous:

Type and Name   Description and Value(s)
int protocol    Define the scheduling classes for mutex locks 
                PTHREAD_PRIO_NONE,PTHREAD_PRIO_PROTECT,
                PTHREAD_PRIO_INHERIT

int pshared Defines whether a mutex is shared with other processes. 
                PTHREAD_PROCESS_SHARED, PTHREAD_PROCESS_PRIVATE

int prioceiling Used for mutex attribute priority ceiling values. 
                See POSIX.1 section 13

int type    Application defined mutex locking
                PTHREAD_MUTEX_NORMAL,PTHREAD_MUTEX_RECURSIVE,
                PTHREAD_MUTEX_ERRORCHECK,PTHREAD_MUTEX_DEFAULT
4
répondu Lorenzo 2010-11-23 02:00:21

si vous faites défiler vers le bas la liste des fonctions pour <pthread.h>, vous trouverez un tas de pthread_mutexattr_... fonctions, y compris un init, destroy et des fonctions pour définir divers attributs d'un mutex. Lorsque vous transmettez NULL, le mutex est créé par défaut pour tous ces attributs, mais si vous avez besoin de modifier des attributs spécifiques, vous pouvez construire un pthread_mutexattr_t structurez et passez-le.

1
répondu casablanca 2010-11-23 01:59:40

appliquer NULL à cet argument implique d'utiliser l'argument par défaut. Donc, pour certaines raisons, vous pourriez vouloir modifier ces paramètres par défaut (en utilisant pthread_mutexattr_init).

la documentation explique tout ce dont vous avez besoin sur ces paramètres mutex.

0
répondu Julio Guerra 2010-11-23 02:01:51