CMutex Sınıfı
Bir iş parçacığının kaynağa birbirini dışlamasını sağlayan bir eşitleme nesnesi olan "mutex"i temsil eder.
Sözdizimi
class CMutex : public CSyncObject
Üyeler
Ortak Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
CMutex::CMutex | Bir CMutex nesne oluşturur. |
Açıklamalar
Tek seferde yalnızca bir iş parçacığının verileri veya başka bir denetlenen kaynağı değiştirmesine izin verildiğinde, mutex'ler yararlı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 CMutex
nesne kullanarak, aynı anda yalnızca bir iş parçacığı listeye erişim elde edebilir.
Bir CMutex
nesneyi kullanmak için, gerektiğinde nesnesini oluşturun CMutex
. Beklemek istediğiniz mutex'in adını ve başlangıçta uygulamanızın sahip olması gerektiğini belirtin. Daha sonra oluşturucu döndürdüğünde mutex'e erişebilirsiniz. Denetlenen kaynağa erişiminiz bittiğinde CSyncObject::Unlock'ı çağırın.
Nesneleri kullanmanın CMutex
alternatif bir yöntemi, denetlemek istediğiniz sınıfa veri üyesi olarak türünde CMutex
bir değişken eklemektir. Denetimli nesnenin oluşturulması sırasında, mutex'in CMutex
başlangıçta sahip olup olmadığını, mutex'in adını (işlem sınırları boyunca kullanılacaksa) ve istenen güvenlik özniteliklerini belirterek veri üyesinin oluşturucusunu çağırın.
Nesneler tarafından CMutex
denetlenen kaynaklara bu şekilde erişmek için önce CSingleLock türünde bir değişken oluşturun veya kaynağınızın erişim üyesi işlevine CMultiLock yazın. Ardından kilit nesnesinin üye işlevini çağırın Lock
(örneğin, CSingleLock::Lock). Bu noktada, iş parçacığınız kaynağa erişim elde eder, kaynağın serbest bırakılıp erişim kazanmasını bekler veya kaynağın serbest bırakılıp zaman aşımına uğradı ve kaynağa erişim sağlanamaması için bekler. Her durumda kaynağınıza iş parçacığı açısından güvenli bir şekilde erişilmiştir. Kaynağı serbest bırakmak için, kilit nesnesinin Unlock
üye işlevini (örneğin, CSingleLock::Unlock) kullanın veya kilit nesnesinin kapsamın dışında bırakılmasına izin verin.
Nesneleri kullanma CMutex
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
CMutex
Gereksinimler
Üst bilgi: afxmt.h
CMutex::CMutex
Adlandırılmış veya adlandırılmamış CMutex
bir nesne oluşturur.
CMutex(
BOOL bInitiallyOwn = FALSE,
LPCTSTR lpszName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);
Parametreler
bInitiallyOwn
Nesneyi oluşturan iş parçacığının CMutex
başlangıçta mutex tarafından denetlenen kaynağa erişimi olup olmadığını belirtir.
lpszName
Nesnenin CMutex
adı. Aynı ada sahip başka bir mutex varsa, nesne işlem sınırları boyunca kullanılacaksa lpszName sağlanmalıdır. NULL ise, mutex adı kaldırılacaktır. Ad mevcut bir mutex ile eşleşiyorsa, oluşturucu bu adın mutex'ine başvuran yeni CMutex
bir nesne oluşturur. Ad, mutex olmayan mevcut bir eşitleme nesnesiyle eşleşiyorsa, yapı başarısız olur.
lpsaAttribute
mutex nesnesi için güvenlik öznitelikleri. Bu yapının tam açıklaması için bkz . Windows SDK'sında SECURITY_ATTRIBUTES .
Açıklamalar
Bir CMutex
nesneye erişmek veya nesneyi serbest bırakmak için bir CMultiLock veya CSingleLock nesnesi oluşturun ve bu nesnenin Üyeyi Kilitle ve Kilidini Aç işlevlerini çağırabilirsiniz. CMutex
Nesne tek başına kullanılıyorsa, serbest bırakmak için üye işlevini çağırınUnlock
.
Önemli
Nesneyi oluşturduktan CMutex
sonra, mutex'in zaten mevcut olmadığından emin olmak için GetLastError kullanın. Mutex beklenmedik bir şekilde mevcutsa, sahte bir işlemin çömeldiğini ve mutex'i kötü amaçlı olarak kullanmayı amaçladığını gösterebilir. Bu durumda, önerilen güvenlik bilincine sahip yordam tanıtıcıyı kapatmak ve nesne oluşturulurken bir hata varmış gibi devam etmektir.