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şturunCCriticalSection
. Oluşturucudan başarılı bir dönüş yaptıktan sonra, nesnesini çağrısıyla açıkça kilitleyinLock
. Kritik bölüme erişiminiz bittiğinde arayınUnlock
. 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 birLock
veUnlock
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
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
dwTimeout
Lock
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::Lock
bakın.