Classe CSingleLock

Rappresenta il meccanismo di controllo di accesso utilizzato per controllare l'accesso a una risorsa di un programma multithread.

Sintassi

class CSingleLock

Membri

Costruttori pubblici

Nome Descrizione
CSingleLock::CSingleLock Costruisce un oggetto CSingleLock.

Metodi pubblici

Nome Descrizione
CSingleLock::IsLocked Determina se l'oggetto è bloccato.
CSingleLock::Lock Attende un oggetto di sincronizzazione.
CSingleLock::Unlock Rilascia un oggetto di sincronizzazione.

Osservazioni:

CSingleLock non ha una classe base.

Per usare le classi CSemaphoredi sincronizzazione , CMutex, CCriticalSectione CEvent, è necessario creare un CSingleLock oggetto o CMultiLock per attendere e rilasciare l'oggetto di sincronizzazione. Usare CSingleLock quando è necessario attendere un solo oggetto alla volta. Usare CMultiLock quando sono presenti più oggetti che è possibile usare in un determinato momento.

Per usare un CSingleLock oggetto , chiamare il relativo costruttore all'interno di una funzione membro nella classe della risorsa controllata. Chiamare quindi la IsLocked funzione membro per determinare se la risorsa è disponibile. In caso affermativo, continuare con il resto della funzione membro. Se la risorsa non è disponibile, attendere un periodo di tempo specificato per il rilascio della risorsa o restituire un errore. Al termine dell'utilizzo della risorsa, chiamare la Unlock funzione se l'oggetto CSingleLock deve essere usato di nuovo oppure consentire l'eliminazione definitiva dell'oggetto CSingleLock .

CSingleLock gli oggetti richiedono la presenza di un oggetto derivato da CSyncObject. Si tratta in genere di un membro dati della classe della risorsa controllata. Per altre informazioni su come usare CSingleLock gli oggetti, vedere l'articolo Multithreading: Come usare le classi di sincronizzazione.

Gerarchia di ereditarietà

CSingleLock

Requisiti

Intestazione: afxmt.h

CSingleLock::CSingleLock

Costruisce un oggetto CSingleLock.

explicit CSingleLock(
    CSyncObject* pObject,
    BOOL bInitialLock = FALSE);

Parametri

pObject
Punta all'oggetto di sincronizzazione a cui accedere. Non può essere NULL.

bInitialLock
Specifica se tentare inizialmente di accedere all'oggetto fornito.

Osservazioni:

Questa funzione viene in genere chiamata dall'interno di una funzione membro di accesso della risorsa controllata.

Esempio

// 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

Determina se l'oggetto associato all'oggetto CSingleLock non è firmato (non disponibile).

BOOL IsLocked();

Valore restituito

Diverso da zero se l'oggetto è bloccato; in caso contrario, 0.

Esempio

// 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

Chiamare questa funzione per ottenere l'accesso alla risorsa controllata dall'oggetto di sincronizzazione fornito al CSingleLock costruttore.

BOOL Lock(DWORD dwTimeOut = INFINITE);

Parametri

dwTimeOut
Specifica la quantità di tempo di attesa per la disponibilità dell'oggetto di sincronizzazione (segnalato). Se INFINITE, Lock attenderà finché l'oggetto non viene segnalato prima della restituzione.

Valore restituito

Diverso da zero se la funzione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

Se l'oggetto di sincronizzazione viene segnalato, Lock verrà restituito correttamente e il thread ora è proprietario dell'oggetto . Se l'oggetto di sincronizzazione non è firmato (non disponibile), Lock attenderà che l'oggetto di sincronizzazione venga segnalato fino al numero di millisecondi specificato nel dwTimeOut parametro . Se l'oggetto di sincronizzazione non è stato segnalato nell'intervallo di tempo specificato, Lock restituisce un errore.

Esempio

// 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

Rilascia l'oggetto di sincronizzazione di proprietà di CSingleLock.

BOOL Unlock();

BOOL Unlock(
    LONG lCount,
    LPLONG lPrevCount = NULL);

Parametri

lCount
Numero di accessi da rilasciare. Deve essere maggiore di 0. Se la quantità specificata determina il superamento del numero massimo dell'oggetto, il conteggio non viene modificato e la funzione restituisce FALSE.

lPrevCount
Punta a una variabile per ricevere il conteggio precedente dell'oggetto di sincronizzazione. Se NULL, il conteggio precedente non viene restituito.

Valore restituito

Diverso da zero se la funzione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

Questa funzione viene chiamata dal CSingleLockdistruttore di .

Se è necessario rilasciare più di un numero di accessi di un semaforo, usare la seconda forma di Unlock e specificare il numero di accessi da rilasciare.

Esempio

// 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();
}

Vedi anche

Grafico della gerarchia
CMultiLock Classe