Man page - pthread_mutex_lock(3)

Packages contains this manual

Available languages:

en fr ja ro

Manual

pthread_mutex_init

NOM
SYNOPSIS
DESCRIPTION
ANNULATION
ASYNC-SIGNAL SAFETY
VALEUR RENVOYÉE
ERREURS
VOIR AUSSI
EXEMPLE
TRADUCTION

NOM

pthread_mutex_init, pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock, pthread_mutex_destroy - Opérations sur les mutex

SYNOPSIS

#include <pthread.h>

pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t
recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
pthread_mutex_t
errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;

int pthread_mutex_init(pthread_mutex_t * mutex ,
const pthread_mutexattr_t *
mutexattr );
int pthread_mutex_lock(pthread_mutex_t *
mutex );
int pthread_mutex_trylock(pthread_mutex_t *
mutex );
int pthread_mutex_unlock(pthread_mutex_t *
mutex );
int pthread_mutex_destroy(pthread_mutex_t *
mutex );

DESCRIPTION

Un mutex est un objet d’exclusion mutuelle (MUTual EXclusion), et il est trĂšs pratique pour protĂ©ger des donnĂ©es partagĂ©es de modifications simultanĂ©es et pour implĂ©menter des sections critiques et moniteurs.

Un mutex peut ĂȘtre dans deux Ă©tats : dĂ©verrouillĂ© (pris par aucun thread) ou verrouillĂ© (pris par un thread). Un mutex ne peut ĂȘtre pris que par un seul thread Ă  la fois. Un thread qui tente de verrouiller un mutex dĂ©jĂ  verrouillĂ© est suspendu jusqu’à ce que le mutex soit dĂ©verrouillĂ©.

pthread_mutex_init () initialise le mutex pointé par mutex selon les attributs de mutex spécifié par mutexattr . Si mutexattr vaut NULL, les paramÚtres par défaut sont utilisés.

L’implĂ©mentation LinuxThreads ne gĂšre qu’un seul attribut, le type de mutex , qui peut ĂȘtre soit « rapide », « rĂ©cursif » ou Ă  « vĂ©rification d’erreur ». Le type de mutex dĂ©termine s’il peut ĂȘtre verrouillĂ© plusieurs fois par le mĂȘme thread. Le type par dĂ©faut est « rapide ». Voyez pthread_mutexattr_init (3) pour plus d’informations sur les attributs de mutex.

Les variables de type pthread_mutex_t peuvent aussi ĂȘtre initialisĂ©es de maniĂšre statique, en utilisant les constantes PTHREAD_MUTEX_INITIALIZER (pour les mutex « rapides »), PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP (pour les mutex « rĂ©cursifs ») et PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP (pour les mutex Ă  « vĂ©rification d’erreur »).

pthread_mutex_lock () verrouille le mutex. Si le mutex est dĂ©verrouillĂ©, il devient verrouillĂ© et il est possĂ©dĂ© par le thread appelant et pthread_mutex_lock () rend la main immĂ©diatement. Si le mutex est dĂ©jĂ  verrouillĂ© par un autre thread, pthread_mutex_lock suspend le thread appelant jusqu’à ce que le mutex soit dĂ©verrouillĂ©.

Si le mutex est dĂ©jĂ  verrouillĂ© par le thread appelant, le comportement de pthread_mutex_lock () dĂ©pend du type du mutex. Si ce dernier est de type « rapide », le thread appelant est suspendu jusqu’à ce que le mutex soit dĂ©verrouillĂ©, plaçant ainsi le thread appelant en situation de blocage dĂ©finitif. Si le mutex est de type « vĂ©rification d’erreur », pthread_mutex_lock () rend la main immĂ©diatement avec le code d’erreur EDEADLK . Si le mutex est de type « rĂ©cursif », pthread_mutex_lock () rend la main immĂ©diatement avec un code de retour indiquant le succĂšs, enregistrant le nombre de fois oĂč le thread appelant a verrouillĂ© le mutex. Un nombre Ă©gal d’appels Ă  pthread_mutex_unlock () doit ĂȘtre rĂ©alisĂ© avant que le mutex retourne Ă  l’état dĂ©verrouillĂ©.

pthread_mutex_trylock () se comporte de la mĂȘme maniĂšre que pthread_mutex_lock (), exceptĂ© qu’elle ne bloque pas le thread appelant si le mutex est dĂ©jĂ  verrouillĂ© par un autre thread (ou par le thread appelant dans le cas d’un mutex « rapide »). Au contraire, pthread_mutex_trylock () rend la main immĂ©diatement avec le code d’erreur EBUSY .

pthread_mutex_unlock () dĂ©verrouille le mutex. Celui-ci est supposĂ© verrouillĂ©, et ce par le thread courant en entrant dans pthread_mutex_unlock (). Si le mutex est de type « rapide », pthread_mutex_unlock () le rĂ©initialise toujours Ă  l’état dĂ©verrouillĂ©. S’il est de type « rĂ©cursif », son compteur de verrouillage est dĂ©crĂ©mentĂ© (du nombre d’opĂ©rations pthread_mutex_lock () rĂ©alisĂ©es sur le mutex par le thread appelant), et dĂ©verrouillĂ© seulement quand ce compteur atteint 0.

Sur les mutex « vĂ©rification d’erreur » et « rĂ©cursif », pthread_mutex_unlock () vĂ©rifie lors de l’exĂ©cution que le mutex est verrouillĂ© en entrant, et qu’il est verrouillĂ© par le mĂȘme thread que celui appelant pthread_mutex_unlock () Si ces conditions ne sont pas rĂ©unies, un code d’erreur est renvoyĂ© et le mutex n’est pas modifiĂ©. Les mutex « rapides » ne rĂ©alisent pas de tels tests, permettant Ă  un mutex verrouillĂ© d’ĂȘtre dĂ©verrouillĂ© par un thread autre que celui l’ayant verrouillĂ©. Ce comportement n’est pas portable et l’on ne doit pas compter dessus.

pthread_mutex_destroy () dĂ©truit un mutex, libĂ©rant les ressources qu’il dĂ©tient. Le mutex doit ĂȘtre dĂ©verrouillĂ©. Dans l’implĂ©mentation LinuxThreads, aucune ressource ne peut ĂȘtre associĂ©e Ă  un mutex, aussi pthread_mutex_destroy () ne fait rien si ce n’est vĂ©rifier que le mutex n’est pas verrouillĂ©.

ANNULATION

Aucune des primitives relatives aux mutex n’est un point d’annulation, ni mĂȘme pthread_mutex_lock (), malgrĂ© le fait qu’il peut suspendre l’exĂ©cution du thread pour une longue durĂ©e. De cette maniĂšre, l’état des mutex aux points d’annulation est prĂ©visible, permettant aux gestionnaires d’annulation de dĂ©verrouiller prĂ©cisĂ©ment ces mutex qui nĂ©cessitent d’ĂȘtre dĂ©verrouillĂ©s avant que l’exĂ©cution du thread ne s’arrĂȘte dĂ©finitivement. Aussi, les threads travaillant en mode d’annulation retardĂ©e ne doivent-jamais verrouiller un mutex pour de longues pĂ©riodes de temps.

ASYNC-SIGNAL SAFETY

Les fonctions relatives aux mutex ne sont pas fiables par rapport aux signaux asynchrones et ne doivent donc pas ĂȘtre utilisĂ©es dans des gestionnaires de signaux. En particulier, appeler pthread_mutex_lock () ou pthread_mutex_unlock () dans un gestionnaire de signal peut placer le thread appelant dans une situation de blocage dĂ©finitif.

VALEUR RENVOYÉE

pthread_mutex_init () retourne toujours 0. Les autres fonctions renvoient 0 en cas de succùs et un code d’erreur non nul en cas de problùme.

ERREURS

La fonction pthread_mutex_lock () renvoie l’un des codes d’erreur suivants en cas de problùme :

EINVAL

Le mutex n’a pas Ă©tĂ© initialisĂ© correctement.

EDEADLK

Le mutex est dĂ©jĂ  verrouillĂ© par le thread appelant (mutex Ă  « vĂ©rification d’erreur » seulement).

La fonction pthread_mutex_trylock () renvoie l’un des codes d’erreur suivants en cas de problùme :

EBUSY

Le mutex ne peut ĂȘtre verrouillĂ© car il l’est dĂ©jĂ .

EINVAL

Le mutex n’a pas Ă©tĂ© initialisĂ© correctement.

La fonction pthread_mutex_unlock () renvoie le code d’erreur suivant en cas de problùme :

EINVAL

Le mutex n’a pas Ă©tĂ© initialisĂ© correctement.

EPERM

Le thread appelant ne possĂšde pas le mutex (mutex Ă  « vĂ©rification d’erreur » seulement).

La fonction pthread_mutex_destroy () renvoie le code d’erreur suivant en cas de problùme :

EBUSY

Le mutex est déjà verrouillé.

VOIR AUSSI

pthread_mutexattr_init (3), pthread_mutexattr_setkind_np (3), pthread_cancel (3).

EXEMPLE

Une variable globale partagĂ©e x peut ĂȘtre protĂ©gĂ©e par un mutex comme suit :

int x; pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;

Tous les accĂšs et modifications de x doivent ĂȘtre entourĂ©s de paires d’appels Ă  pthread_mutex_lock () et pthread_mutex_unlock () comme suit :

pthread_mutex_lock(&mut); /* operate on x */ pthread_mutex_unlock(&mut);

TRADUCTION

La traduction française de cette page de manuel a été créée par Gérard Delafond <gerard@delafond.org>, Christophe Blaess <ccb@club-internet.fr>, Thierry Vignaud <tvignaud@mandriva.com>, Alain Portal <aportal@univ-montp2.fr>, Denis Barbier <barbier@debian.org>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Thomas Blein <tblein@tblein.eu> et David Prévot <david@tilapin.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .