Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
CCriticalSectionnesne 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
CSingleLockdaha tercih edilebilir bir yöntemdir. Ayrıca birLockveUnlockyö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
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.