CCriticalSection Sınıf

Bir "kritik bölümü" temsil eder; bir kerede bir iş parçacığının bir kaynağa veya kod bölümüne erişmesine izin veren bir eşitleme nesnesidir.

Sözdizimi

class CCriticalSection : public CSyncObject

Üyeler

Ortak Oluşturucular

Veri Akışı Adı Açıklama
CCriticalSection::CCriticalSection Bir CCriticalSection nesne oluşturur.

Genel Yöntemler

Veri Akışı Adı Açıklama
CCriticalSection::Lock Nesnesine erişim elde etmek için CCriticalSection kullanın.
CCriticalSection::Unlock Nesnesini serbest bırakır CCriticalSection .

Ortak İşleçler

Veri Akışı Adı Açıklama
CCriticalSection::operator CRITICAL_SECTION* İç CRITICAL_SECTION nesneye yönelik bir işaretçi alır.

Ortak Veri Üyeleri

Veri Akışı Adı Açıklama
CCriticalSection::m_sect Bir CRITICAL_SECTION nesnesi.

Açıklamalar

Kritik bölümler, bir kerede yalnızca bir iş parçacığının verileri veya başka bir denetlenen kaynağı değiştirmesine izin verildiğinde kullanışlıdır. Örneğin, bağlı listeye düğüm eklemek, aynı anda yalnızca bir iş parçacığı tarafından izin verilmesi gereken bir işlemdir. Bağlantılı listeyi denetlemek için bir CCriticalSection nesne kullanarak, aynı anda yalnızca bir iş parçacığı listeye erişim elde edebilir.

Not

sınıfının işlevselliği CCriticalSection gerçek bir Win32 CRITICAL_SECTION nesnesi tarafından sağlanır.

Kritik bölümler, hız kritik olduğunda ve kaynak işlem sınırları boyunca kullanılmadığında mutexes yerine kullanılır (bkz CMutex. ).

Nesne kullanmanın CCriticalSection iki yöntemi vardır: tek başına ve bir sınıfa katıştırılmış.

  • Tek başına yöntem Tek başına CCriticalSection nesne kullanmak için, gerektiğinde nesneyi oluşturun CCriticalSection . Oluşturucudan başarılı bir dönüş yaptıktan sonra, nesnesini çağrısıyla açıkça kilitleyin Lock. Kritik bölüme erişiminiz bittiğinde arayın Unlock . Bu yöntem, kaynak kodunuzu okuyan biri için daha net olsa da, erişimden önce ve sonra kritik bölümü kilitlemeyi ve kilidini açmayı hatırlamanız gerektiğinden hataya daha açıktır.

    Sınıfını kullanmak CSingleLock daha tercih edilebilir bir yöntemdir. Ayrıca bir Lock ve Unlock yöntemi de vardır, ancak bir özel durum oluşursa kaynağın kilidini açma konusunda endişelenmeniz gerekmez.

  • Katıştırılmış yöntem Ayrıca sınıfına bir CCriticalSection-type veri üyesi ekleyerek ve gerektiğinde veri üyesini kilitleyerek sınıfı birden çok iş parçacığıyla paylaşabilirsiniz.

Nesneleri kullanma CCriticalSection hakkında daha fazla bilgi için Çoklu İş Parçacığı Kullanımı: Eşitleme Sınıflarını Kullanma makalesine bakın.

Devralma Hiyerarşisi

CObject

CSyncObject

CCriticalSection

Gereksinimler

Üstbilgi: afxmt.h

CCriticalSection::CCriticalSection

Bir CCriticalSection nesne oluşturur.

CCriticalSection();

Açıklamalar

Bir CCriticalSection nesneye erişmek veya nesneyi serbest bırakmak için bir CSingleLock nesne oluşturun ve nesnenin ve Unlock üye işlevlerini çağırinLock. CCriticalSection Nesne tek başına kullanılıyorsa, serbest bırakmak için üye işlevini çağırınUnlock.

Oluşturucu gerekli sistem belleğini ayıramazsa, otomatik olarak bir bellek özel durumu (türü CMemoryException) oluşturulur.

Örnek

CCriticalSection::Lock örneğine bakın.

CCriticalSection::Lock

Kritik bölüm nesnesine erişim kazanmak için bu üye işlevini çağırın.

BOOL Lock();
BOOL Lock(DWORD dwTimeout);

Parametreler

dwTimeoutLock bu parametre değerini yoksayar.

Dönüş Değeri

İşlev başarılı olursa sıfır olmayan; aksi takdirde 0.

Açıklamalar

Lock kritik bölüm nesnesi işaretlenene (kullanılabilir duruma gelene) kadar döndürülmeyecek bir engelleme çağrısıdır.

Zamanlanmış beklemeler gerekiyorsa, nesne yerine bir CCriticalSection nesne kullanabilirsinizCMutex.

Lock Gerekli sistem belleği ayrılmazsa, otomatik olarak bir bellek özel durumu (türüCMemoryException) oluşturulur.

Örnek

Bu örnek, paylaşılan bir nesne kullanarak CCriticalSection paylaşılan kaynağa (statik _strShared nesne) erişimi denetleyerek iç içe yerleştirilmiş kritik bölüm yaklaşımını gösterir. işlevi, SomeMethod paylaşılan bir kaynağı güvenli bir şekilde güncelleştirme işlemini gösterir.

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

Tüm CCriticalSection yöntemler tarafından kullanılan kritik bir bölüm nesnesi içerir.

CRITICAL_SECTION m_sect;

CCriticalSection::operator CRITICAL_SECTION*

Bir CRITICAL_SECTION nesneyi alır.

operator CRITICAL_SECTION*();

Açıklamalar

İç CRITICAL_SECTION nesneye bir işaretçi almak için bu işlevi çağırın.

CCriticalSection::Unlock

CCriticalSection Nesneyi başka bir iş parçacığı tarafından kullanılmak üzere serbest bırakır.

BOOL Unlock();

Dönüş Değeri

Nesne iş parçacığına CCriticalSection aitse ve yayın başarılıysa sıfır olmayan; aksi takdirde 0.

Açıklamalar

CCriticalSection tek başına kullanılıyorsa, Unlock kritik bölüm tarafından denetlenen kaynağın kullanımı tamamlandıktan hemen sonra çağrılmalıdır. Bir CSingleLock nesne kullanılıyorsa, CCriticalSection::Unlock kilit nesnesinin Unlock üye işlevi tarafından çağrılır.

Örnek

örneğine CCriticalSection::Lockbakın.

Ayrıca bkz.

CSyncObject Sınıf
Hiyerarşi Grafiği
CMutex Sınıf