CMultiLock, classe
Représente le mécanisme de contrôle d'accès utilisé pour accéder aux ressources dans un programme multithread.
Syntaxe
class CMultiLock
Membres
Constructeurs publics
Nom | Description |
---|---|
CMultiLock ::CMultiLock | Construit un objet CMultiLock . |
Méthodes publiques
Nom | Description |
---|---|
CMultiLock ::IsLocked | Détermine si un objet de synchronisation spécifique dans le tableau est verrouillé. |
CMultiLock ::Lock | Attend le tableau d’objets de synchronisation. |
CMultiLock ::Unlock | Libère tous les objets de synchronisation détenus. |
Notes
CMultiLock
n’a pas de classe de base.
Pour utiliser les classes de synchronisation CSemaphore, CMutex et CEvent, vous pouvez créer un CMultiLock
objet ou CSingleLock pour attendre et libérer l’objet de synchronisation. Utilisez CMultiLock
lorsqu’il existe plusieurs objets que vous pouvez utiliser à un moment donné. Utilisez CSingleLock
quand vous n’avez besoin d’attendre qu’un seul objet à la fois.
Pour utiliser un CMultiLock
objet, commencez par créer un tableau des objets de synchronisation sur lesquels vous souhaitez attendre. Ensuite, appelez le constructeur de l’objet CMultiLock
à l’intérieur d’une fonction membre dans la classe de la ressource contrôlée. Appelez ensuite la fonction de membre Lock pour déterminer si une ressource est disponible (signalée). Si c’est le cas, poursuivez avec le reste de la fonction membre. Si aucune ressource n’est disponible, attendez un délai spécifié pour qu’une ressource soit libérée ou retourne un échec. Une fois l’utilisation d’une ressource terminée, appelez la fonction Déverrouillage si l’objet CMultiLock
doit être utilisé à nouveau ou autoriser l’objet CMultiLock
à être détruit.
CMultiLock
les objets sont les plus utiles lorsqu’un thread a un grand nombre d’objets CEvent
auxquels il peut répondre. Créez un tableau contenant tous les CEvent
pointeurs et appelez Lock
. Cela entraîne l’attente du thread jusqu’à ce que l’un des événements soit signalé.
Pour plus d’informations sur l’utilisation des CMultiLock
objets, consultez l’article Multithreading : Utilisation des classes de synchronisation.
Hiérarchie d'héritage
CMultiLock
Spécifications
En-tête : afxmt.h
CMultiLock ::CMultiLock
Construit un objet CMultiLock
.
CMultiLock(
CSyncObject* ppObjects [ ],
DWORD dwCount,
BOOL bInitialLock = FALSE);
Paramètres
ppObjects
Tableau de pointeurs vers les objets de synchronisation à attendre. Ne peut pas avoir la valeur NULL.
dwCount
Nombre d’objets dans ppObjects. Doit être supérieure à 0.
bInitialLock
Spécifie s’il faut tenter initialement d’accéder à l’un des objets fournis.
Notes
Cette fonction est appelée après avoir créé le tableau d’objets de synchronisation à attendre. Il est généralement appelé à partir du thread qui doit attendre que l’un des objets de synchronisation devienne disponible.
CMultiLock ::IsLocked
Détermine si l’objet spécifié n’est pas signé (indisponible).
BOOL IsLocked(DWORD dwItem);
Paramètres
dwItem
Index dans le tableau d’objets correspondant à l’objet dont l’état est interrogé.
Valeur de retour
Différent de zéro si l’objet spécifié est verrouillé ; sinon 0.
CMultiLock ::Lock
Appelez cette fonction pour accéder à une ou plusieurs ressources contrôlées par les objets de synchronisation fournis au CMultiLock
constructeur.
DWORD Lock(
DWORD dwTimeOut = INFINITE,
BOOL bWaitForAll = TRUE,
DWORD dwWakeMask = 0);
Paramètres
dwTimeOut
Spécifie la durée d’attente de l’objet de synchronisation à mettre à disposition (signalé). Si INFINITE, Lock
attend que l’objet soit signalé avant de retourner.
bWaitForAll
Spécifie si tous les objets attendus doivent être signalés en même temps avant de retourner. Si la valeur est FALSE, Lock
retourne quand l’un des objets attendus est signalé.
dwWakeMask
Spécifie d’autres conditions autorisées à abandonner l’attente. Pour obtenir la liste complète des options disponibles pour ce paramètre, consultez MsgWaitForMultipleObjects dans le Kit de développement logiciel (SDK) Windows.
Valeur de retour
En Lock
cas d’échec, elle retourne - 1. Si elle réussit, elle retourne l’une des valeurs suivantes :
Entre WAIT_OBJECT_0 et WAIT_OBJECT_0 + (nombre d’objets - 1)
Si bWaitForAll a la valeur TRUE, tous les objets sont signalés (disponibles). Si bWaitForAll a la valeur FALSE, la valeur de retour WAIT_OBJECT_0 est l’index dans le tableau d’objets de l’objet signalé (disponible).
WAIT_OBJECT_0 + (nombre d’objets)
Un événement spécifié dans dwWakeMask est disponible dans la file d’attente d’entrée du thread.
Entre WAIT_ABANDONED_0 et WAIT_ABANDONED_0 + (nombre d’objets - 1)
Si bWaitForAll a la valeur TRUE, tous les objets sont signalés et au moins l’un des objets est un objet mutex abandonné. Si bWaitForAll a la valeur FALSE, la valeur de retour - WAIT_ABANDONED_0 est l’index dans le tableau d’objets de l’objet mutex abandonné qui satisfait l’attente.
WAIT_TIMEOUT
L’intervalle de délai d’expiration spécifié dans dwTimeOut a expiré sans que l’attente réussisse.
Notes
Si bWaitForAll a la valeur TRUE, Lock
retourne correctement dès que tous les objets de synchronisation deviennent signalés simultanément. Si bWaitForAll a la valeur FALSE, Lock
retourne dès qu’un ou plusieurs objets de synchronisation sont signalés.
Si Lock
elle n’est pas en mesure de retourner immédiatement, elle attend pas plus que le nombre de millisecondes spécifiées dans le paramètre dwTimeOut avant de retourner. Si dwTimeOut est INFINITE, Lock
ne retourne pas tant que l’accès à un objet n’est pas obtenu ou qu’une condition spécifiée dans dwWakeMask n’a pas été remplie. Sinon, si Lock
elle a pu acquérir un objet de synchronisation, elle retourne correctement ; si ce n’est pas le cas, elle retourne un échec.
CMultiLock ::Unlock
Libère l’objet de synchronisation appartenant à CMultiLock
.
BOOL Unlock();
BOOL Unlock(
LONG lCount,
LPLONG lPrevCount = NULL);
Paramètres
lCount
Nombre de références à libérer. Doit être supérieure à 0. Si la quantité spécifiée entraîne le dépassement du nombre maximal de l’objet, le nombre n’est pas modifié et la fonction retourne FALSE.
lPrevCount
Pointe vers une variable pour recevoir le nombre précédent pour l’objet de synchronisation. Si la valeur EST NULL, le nombre précédent n’est pas retourné.
Valeur de retour
Différent de zéro si la fonction a réussi ; sinon 0.
Notes
Cette fonction est appelée par CMultiLock
le destructeur de 's.
La première forme de tentatives de Unlock
déverrouillage de l’objet de synchronisation géré par CMultiLock
. La deuxième forme de tentatives de Unlock
déverrouillage des CSemaphore
objets détenus par CMultiLock
. Si CMultiLock
elle ne possède aucun objet verrouillé CSemaphore
, la fonction retourne FALSE ; sinon, elle retourne TRUE. lCount et lpPrevCount sont exactement les mêmes que les paramètres de CSingleLock ::Unlock. La deuxième forme est Unlock
rarement applicable aux situations multiblocages.