Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.
Egy "kritikus szakaszt" jelöl – egy szinkronizálási objektumot, amely lehetővé teszi, hogy egyszerre egy szál hozzáférjen egy erőforráshoz vagy kódszakaszhoz.
Szemantika
class CCriticalSection : public CSyncObject
Tagok
Nyilvános konstruktorok
| Név | Description |
|---|---|
CCriticalSection::CCriticalSection |
Egy CCriticalSection objektumot hoz létre. |
Nyilvános metódusok
| Név | Description |
|---|---|
CCriticalSection::Lock |
Az objektumhoz CCriticalSection való hozzáféréshez használható. |
CCriticalSection::Unlock |
Felszabadítja az CCriticalSection objektumot. |
Nyilvános operátorok
| Név | Description |
|---|---|
CCriticalSection::operator CRITICAL_SECTION* |
A belső CRITICAL_SECTION objektumra mutató mutatót kér le. |
Nyilvános adatok tagjai
| Név | Description |
|---|---|
CCriticalSection::m_sect |
Egy CRITICAL_SECTION objektum. |
Megjegyzések
A kritikus szakaszok akkor hasznosak, ha egyszerre csak egy szál módosíthatja az adatokat vagy más vezérelt erőforrásokat. Csomópontok hozzáadása például egy csatolt listához olyan folyamat, amelyet egyszerre csak egy szálnak kell engedélyeznie. Ha objektumot CCriticalSection használ a csatolt lista vezérlésére, egyszerre csak egy szál férhet hozzá a listához.
Megjegyzés:
Az osztály funkcióit CCriticalSection egy tényleges Win32-objektum CRITICAL_SECTION biztosítja.
A kritikus szakaszokat a rendszer mutexek helyett (lásd CMutex) használja, ha a sebesség kritikus, és az erőforrás nem lesz használható a folyamathatárok között.
Az objektumok használatára CCriticalSection két módszer létezik: önálló és osztályba ágyazott.
Önálló metódus Önálló objektum használatához
CCriticalSectionszükség esetén hozza létre azCCriticalSectionobjektumot. A konstruktor sikeres visszatérése után explicit módon zárolja az objektumot egy hívással.LockHívjonUnlock, ha befejezte a kritikus szakasz elérését. Ez a módszer, bár a forráskódot olvasó személy számára egyértelműbb, hajlamosabb a hibára, mivel nem szabad elfelejtenie, hogy a hozzáférés előtt és után zárolni és feloldani kell a kritikus szakaszt.A jobb módszer az osztály használata
CSingleLock. Emellett rendelkezik egy ésUnlockegyLockmetódussal is, de nem kell aggódnia az erőforrás zárolásának feloldásával, ha kivétel történik.Beágyazott módszer: Az osztályokat több szálon is megoszthatja, ha hozzáad egy
CCriticalSection-type adattagot az osztályhoz, és szükség esetén zárolja az adattagot.
Az objektumok használatáról CCriticalSection további információt a Többszálúság: A szinkronizálási osztályok használata című cikkben talál.
Öröklési hierarchia
CCriticalSection
Requirements
Fejléc:afxmt.h
CCriticalSection::CCriticalSection
Egy CCriticalSection objektumot hoz létre.
CCriticalSection();
Megjegyzések
Objektum eléréséhez vagy kiadásához CCriticalSection hozzon létre egy objektumotCSingleLock, és hívja meg annak és Unlock tagfüggvényeitLock. Ha az CCriticalSection objektumot önállóan használja, hívja meg annak tagfüggvényét Unlock a kiadásához.
Ha a konstruktor nem tudja lefoglalni a szükséges rendszermemóriát, a rendszer automatikusan kivesz egy memóriakivételt (típus).CMemoryException
Example
Lásd a CCriticalSection::Lock példát.
CCriticalSection::Lock
Hívja meg ezt a tagfüggvényt, hogy hozzáférjen a kritikus szakaszobjektumhoz.
BOOL Lock();
BOOL Lock(DWORD dwTimeout);
Paraméterek
dwTimeout
Lock figyelmen kívül hagyja ezt a paraméterértéket.
Visszaadott érték
Nonzero, ha a függvény sikeres volt; egyéb esetben 0.
Megjegyzések
Lock egy blokkoló hívás, amely addig nem ad vissza, amíg a kritikus szakaszobjektum nem lesz jelezve (elérhetővé válik).
Ha időtúllépésre van szükség, objektum helyett objektumot CMutexCCriticalSection használhat.
Ha Lock a rendszer nem tudja lefoglalni a szükséges rendszermemóriát, a rendszer automatikusan kivesz egy memóriakivételt (típus).CMemoryException
Example
Ez a példa a beágyazott kritikus szakasz megközelítését mutatja be egy megosztott erőforráshoz (a statikus _strShared objektumhoz) való hozzáférés egy megosztott CCriticalSection objektum használatával történő szabályozásával. A SomeMethod függvény egy megosztott erőforrás biztonságos frissítését mutatja be.
//Definition of critical section class
class CMyCritSectClass
{
static CString _strShared; //shared resource
static CCriticalSection _critSect;
public:
CMyCritSectClass(void) {}
~CMyCritSectClass(void) {}
void SomeMethod(void); //locks, modifies, and unlocks shared resource
};
//Declaration of static members and SomeMethod
CString CMyCritSectClass::_strShared;
CCriticalSection CMyCritSectClass::_critSect;
void CMyCritSectClass::SomeMethod()
{
_critSect.Lock();
if (_strShared == "")
_strShared = "<text>";
_critSect.Unlock();
}
CCriticalSection::m_sect
Az összes CCriticalSection metódus által használt kritikus szakaszobjektumot tartalmazza.
CRITICAL_SECTION m_sect;
CCriticalSection::operator CRITICAL_SECTION*
Beolvas egy objektumot CRITICAL_SECTION .
operator CRITICAL_SECTION*();
Megjegyzések
Hívja meg ezt a függvényt a belső CRITICAL_SECTION objektumra mutató mutató lekéréséhez.
CCriticalSection::Unlock
Felszabadítja az CCriticalSection objektumot egy másik szál általi használatra.
BOOL Unlock();
Visszaadott érték
Nonzero, ha az CCriticalSection objektum a szál tulajdonában volt, és a kiadás sikeres volt, egyébként 0.
Megjegyzések
Ha a CCriticalSection használatban lévő erőforrást önállóan használja, Unlock a kritikus szakasz által vezérelt erőforrás használatának befejezése után azonnal meg kell hívni. Ha objektumot CSingleLock használ, CCriticalSection::Unlock a zárolási objektum tagfüggvénye Unlock hívja meg.
Example
Lásd a példát a CCriticalSection::Lock.