Aracılığıyla paylaş


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

CObject

CSyncObject

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.

Ayrıca bkz.

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