IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Viadeo Twitter Facebook Share on Google+   
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

QMutex

La classe QMutex fournit un acc�s � la s�rialisation entre threads. Plus d'informations...

#include <QMutex>

Voir la position dans l'arbre des classes.

  

Description d�taill�e

La classe QMutex fournit un acc�s � la s�rialisation entre threads.

Le but de QMutex est de prot�ger un objet, une structure de donn�es ou une section de code de sorte que qu'un seul thread puisse y acc�der � un moment donn� (ceci est similaire au mot-cl� synchronized en Java). Il est g�n�ralement pr�f�rable d'utiliser un mutex avec un QMutexLocker il est ainsi plus facile d'assurer la coh�rence du verrouillage et d�verrouillage.

Par exemple, supposons qu'il existe une m�thode qui renvoie un message � l'utilisateur sur deux lignes :

int number = 6;
 
void method1()
{
	number *= 5;
	number /= 4;
}
 
void method2()
{
	number *= 3;
	number /= 2;
}

Si ces deux m�thodes sont appel�es successivement, les �v�nements suivants se produisent :

// method1()
number *= 5; // number est maintenant 30
number /= 4; // number est maintenant 7
 
// method2()
number *= 3; // number est maintenant 21
number /= 2; // number est maintenant 10

Si ces deux m�thodes sont appel�es simultan�ment � partir de deux threads alors cela peut entra�ner la s�quence suivante :

// Thread 1 appelle method1()
number *= 5; // number est maintenant 30
 
// Thread 2 appelle method2().
// Tr�s probablement Thread 1 a �t� mis en sommeil par le syst�me d'exploitation
// pour mettre le Thread 2 en route.
number *= 3; // number est maintenant 90
number /= 2; // number est maintenant 45
 
// Thread 1 finit son ex�cution.
number /= 4; // number est maintenant 11, au lieu de 10

En ajoutant un mutex, nous devrions obtenir le r�sultat souhait� :

QMutex mutex;
int number = 6;
 
void method1()
{
mutex.lock();
	number *= 5;
	number /= 4;
mutex.unlock();
}
 
void method2()
{
	mutex.lock();
	number *= 3;
	number /= 2;
	mutex.unlock();
}

Ici, un seul thread peut modifier number � un moment donn� ce qui donne un r�sultat correct. Bien s�r, cet exemple est trivial, mais la m�thode est applicable � chaque fois que l'on a besoin d'imposer une s�quence particuli�re.

Quand vous appelez lock() dans un thread, les autres threads qui essayent d'appeler lock() sur le m�me mutex seront bloqu�s jusqu'� ce que le thread qui a le verrou appelle unlock(). Une alternative non bloquante de lock() est tryLock().

Voir aussi QMutexLocker, QReadWriteLock, QSemaphore et QWaitCondition.

Type

enum QMutex::RecursionMode

 

Constante Valeur Description
‹QMutex::Recursive› 1 Dans ce mode, un thread peut verrouiller le m�me mutex plusieurs fois mais le mutex ne sera d�verrouill� que lorsque le d�verrouillage unlock() aura �t� appel� autant de fois que le verrouillage.
‹QMutex::NonRecursive› 0 Dans ce mode, un thread ne pourra verrouiller un mutex qu'une seule fois.

Voir aussi QMutex().

Fonctions membres

QMutex::QMutex ( RecursionMode mode = NonRecursive )

Construit un nouveau mutex. Le mutex est cr�� dans l'�tat d�verrouill�.

Si le mode est QMutex::Recursive, un thread peut verrouiller le m�me mutex plusieurs fois et le mutex ne sera d�verrouill� que lorsque le nombre d'appel � unlock() sera le m�me que celui d'appel � lock(). La valeur par d�faut est QMutex::NonRecursive.

Voir aussi lock() et unlock().

QMutex::~QMutex ()

D�truit le mutex.

Attention : La destruction d'un mutex verrouill� peut engendrer un comportement inattendu de votre programme.

void QMutex::lock ()

Verrouille le mutex. Si un autre thread l'a d�j� verrouill� alors cet appel sera bloquant jusqu'� ce que l'autre thread le d�verrouille.

Il est possible d'appeler plusieurs fois cette fonction sur le m�me mutex si le mutex est mutex r�cursif. Si le mutex n'est pas r�cursif, l'appel provoquera un verrou mortel (dead-lock).

Voir aussi unlock().

bool QMutex::tryLock ()

Tente de verrouiller le mutex. Si le verrouillage est obtenu, cette fonction retournera true. Si un autre thread a verrouill� le mutex, cette fonction retournera imm�diatement false.

Si le verrouillage est obtenu, le mutex devra �tre d�verrouill� avec unlock() avant qu'un autre thread ne puisse le verrouiller.

Il est possible d'appeler plusieurs fois cette fonction depuis le m�me thread sur un m�me mutex si celui-ci est r�cursif. Sinon la fonction retournera false en cas de tentative de verrouillage r�cursif du mutex.

Voir aussi lock() et unlock().

bool QMutex::tryLock ( int timeout )

Ceci est une fonction membre surcharg�e.

Tente de verrouiller le mutex. La fonction renvoie true en cas de succ�s du verrouillage, false sinon. Si un autre thread a d�j� verrouill� le mutex, la fonction attendra la disponibilit� du mutex pendant au plus timeout millisecondes.

Note : Passer un nombre timeout n�gatif revient � appeler la fonction lock(), ce qui revient � dire que la fonction trylock() attendra ind�finiment que le mutex puisse �tre verrouill�.

Si le verrouillage est obtenu, le mutex devra �tre d�verrouill� avec unlock() avant qu'un autre thread ne puisse le verrouiller � nouveau.

Il est possible d'appeler plusieurs fois cette fonction depuis le m�me thread sur un m�me mutex si celui-ci est r�cursif. Si le mutex n'est pas r�cursif, la fonction retournera false si elle tente de le verrouiller r�cursivement.

Voir aussi lock() et unlock().

void QMutex::unlock ()

Si vous essayez de d�verrouiller un mutex non pr�alablement verrouill�, votre programme adoptera un comportement inattendu.

Voir aussi lock().

Remerciements

Merci � Mikael Sans pour la traduction et � Jonathan Courtois ainsi qu'� Philippe Beaucart pour leur relecture !

Cette page est une traduction d'une page de la documentation de Qt, �crite par Nokia Corporation and/or its subsidiary(-ies). Les �ventuels probl�mes r�sultant d'une mauvaise traduction ne sont pas imputables � Nokia. Qt 4.7
Copyright © 2025 Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'� 3 ans de prison et jusqu'� 300 000 E de dommages et int�r�ts. Cette page est d�pos�e � la SACD.
Vous avez d�nich� une erreur ? Un bug ? Une redirection cass�e ? Ou tout autre probl�me, quel qu'il soit ? Ou bien vous d�sirez participer � ce projet de traduction ? N'h�sitez pas � nous contacter ou par MP !