La classe CSingleLock
Représente le mécanisme de contrôle d'accès utilisé dans le contrôle de l'accès à une ressource dans un programme multithread.
Syntaxe
class CSingleLock
Membres
Constructeurs publics
Nom | Description |
---|---|
CSingleLock::CSingleLock |
Construit un objet CSingleLock . |
Méthodes publiques
Nom | Description |
---|---|
CSingleLock::IsLocked |
Détermine si l’objet est verrouillé. |
CSingleLock::Lock |
Attend un objet de synchronisation. |
CSingleLock::Unlock |
Libère un objet de synchronisation. |
Notes
CSingleLock
n’a pas de classe de base.
Pour utiliser les classes CSemaphore
de synchronisation , CMutex
, CCriticalSection
et , vous CEvent
devez créer un ou CMultiLock
un CSingleLock
objet pour attendre et libérer l’objet de synchronisation. Utilisez CSingleLock
quand vous n’avez besoin d’attendre qu’un seul objet à la fois. Utilisez CMultiLock
lorsqu’il existe plusieurs objets que vous pouvez utiliser à un moment donné.
Pour utiliser un CSingleLock
objet, appelez son constructeur à l’intérieur d’une fonction membre dans la classe de la ressource contrôlée. Appelez ensuite la IsLocked
fonction membre pour déterminer si la ressource est disponible. Si c’est le cas, poursuivez avec le reste de la fonction membre. Si la ressource n’est pas disponible, attendez un délai spécifié pour la libération de la ressource ou l’échec de retour. Une fois que l’utilisation de la ressource est terminée, appelez la Unlock
fonction si l’objet CSingleLock
doit être réutilisé ou autorisez la destruction de l’objet CSingleLock
.
CSingleLock
les objets nécessitent la présence d’un objet dérivé de CSyncObject
. Il s’agit généralement d’un membre de données de la classe de ressource contrôlée. Pour plus d’informations sur l’utilisation des CSingleLock
objets, consultez l’article Multithreading : Utilisation des classes de synchronisation.
Hiérarchie d'héritage
CSingleLock
Spécifications
En-tête : afxmt.h
CSingleLock::CSingleLock
Construit un objet CSingleLock
.
explicit CSingleLock(
CSyncObject* pObject,
BOOL bInitialLock = FALSE);
Paramètres
pObject
Pointe vers l’objet de synchronisation à accéder. Ne peut pas être NULL
.
bInitialLock
Spécifie s’il faut tenter initialement d’accéder à l’objet fourni.
Notes
Cette fonction est généralement appelée à partir d’une fonction membre d’accès de la ressource contrôlée.
Exemple
// m_CritSection is a data member (of type CCriticalSection)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_CritSection) with
// our CSingleLock object.
CSingleLock singleLock(&m_CritSection);
singleLock.Lock(); // Attempt to lock the shared resource
if (singleLock.IsLocked()) // Resource has been locked
{
//...use the shared resource...
// Now that we are finished,
// unlock the resource for others.
singleLock.Unlock();
}
CSingleLock::IsLocked
Détermine si l’objet associé à l’objet CSingleLock
n’est pas signé (indisponible).
BOOL IsLocked();
Valeur de retour
Différent de zéro si l’objet est verrouillé ; sinon 0.
Exemple
// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_Mutex) with
// our CSingleLock object.
CSingleLock singleLock(&m_Mutex);
// Attempt to lock the shared resource
singleLock.Lock(100); // Wait 100 ms...
// Has the resource been successfully locked?
if (singleLock.IsLocked())
{
// We were able to lock the resource;
// we may now work with the data associated with the mutex...
// Now that we are finished, unlock the resource for others.
singleLock.Unlock();
}
CSingleLock::Lock
Appelez cette fonction pour accéder à la ressource contrôlée par l’objet de synchronisation fourni au CSingleLock
constructeur.
BOOL Lock(DWORD dwTimeOut = INFINITE);
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.
Valeur de retour
Différent de zéro si la fonction a réussi ; sinon 0.
Notes
Si l’objet de synchronisation est signalé, Lock
retourne correctement et le thread possède désormais l’objet. Si l’objet de synchronisation n’est pas signé (non signé), Lock
attend que l’objet de synchronisation devienne signalé jusqu’au nombre de millisecondes spécifiées dans le dwTimeOut
paramètre. Si l’objet de synchronisation n’a pas été signalé dans la durée spécifiée, Lock
retourne l’échec.
Exemple
// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_Mutex) with
// our CSingleLock object.
CSingleLock singleLock(&m_Mutex);
// Attempt to lock the shared resource
if (singleLock.Lock(100)) // Wait 100 ms...
{
// We were able to lock the resource;
// we may now work with the data associated with the mutex...
// Now that we are finished, unlock the resource for others.
singleLock.Unlock();
}
CSingleLock::Unlock
Libère l’objet de synchronisation appartenant à CSingleLock
.
BOOL Unlock();
BOOL Unlock(
LONG lCount,
LPLONG lPrevCount = NULL);
Paramètres
lCount
Nombre d’accès à la mise en production. 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 de l’objet de synchronisation. Si 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 CSingleLock
le destructeur de 's.
Si vous devez libérer plusieurs nombres d’accès d’un sémaphore, utilisez la deuxième forme et Unlock
spécifiez le nombre d’accès à libérer.
Exemple
// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_Mutex) with
// our CSingleLock object.
CSingleLock singleLock(&m_Mutex);
// Attempt to lock the shared resource
if (singleLock.Lock(100)) // Wait 100 ms...
{
// We were able to lock the resource;
// we may now work with the data associated with the mutex...
// Now that we are finished, unlock the resource for others.
singleLock.Unlock();
}