Aracılığıyla paylaş


CSemaphore Sınıfı

Sınıfın CSemaphore nesnesi bir "semafor"u temsil eder; bir veya daha fazla işlemdeki sınırlı sayıda iş parçacığının belirtilen bir kaynağa erişen iş parçacığı sayısını korumasını sağlayan eşitleme nesnesidir.

Sözdizimi

class CSemaphore : public CSyncObject

Üyeler

Ortak Oluşturucular

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

Açıklamalar

Semaforlar, yalnızca sınırlı sayıda kullanıcıyı destekleyebilecek paylaşılan bir kaynağa erişimi denetlemede yararlıdır. Nesnenin CSemaphore geçerli sayısı, izin verilen ek kullanıcıların sayısıdır. Sayı sıfıra ulaştığında, nesne tarafından CSemaphore denetlenen kaynağı kullanma girişimleri bir sistem kuyruğuna eklenir ve zaman aşımına uğradıklarında veya sayı 0'ın üzerine çıkana kadar bekler. Denetlenen kaynağa bir kerede erişebilecek en fazla kullanıcı sayısı, nesnenin CSemaphore oluşturulması sırasında belirtilir.

Bir CSemaphore nesneyi kullanmak için, gerektiğinde nesnesini oluşturun CSemaphore . Beklemek istediğiniz semaforun adını ve uygulamanızın başlangıçta bu semafora sahip olması gerektiğini belirtin. Ardından oluşturucu döndürdüğünde semafora erişebilirsiniz. Denetlenen kaynağa erişiminiz bittiğinde CSyncObject::Unlock'ı çağırın.

Nesneleri kullanmanın CSemaphore alternatif bir yöntemi, denetlemek istediğiniz sınıfa veri üyesi olarak türünde CSemaphore bir değişken eklemektir. Denetimli nesnenin oluşturulması sırasında, ilk erişim sayısını, maksimum erişim sayısını, semaforun adını (işlem sınırları arasında kullanılacaksa) ve istenen güvenlik özniteliklerini belirten veri üyesinin oluşturucusunu CSemaphore çağırın.

Nesneler tarafından CSemaphore 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.

Alternatif olarak, tek başına bir CSemaphore nesne oluşturabilir ve denetlenen kaynağa erişmeye çalışmadan önce nesneye açıkça erişebilirsiniz. Bu yöntem, kaynak kodunuzu okuyan biri için daha net olsa da hataya daha açıktır.

Nesneleri kullanma CSemaphore 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

CSemaphore

Gereksinimler

Üst bilgi: afxmt.h

CSemaphore::CSemaphore

Adlandırılmış veya adlandırılmamış CSemaphore bir nesne oluşturur.

CSemaphore(
    LONG lInitialCount = 1,
    LONG lMaxCount = 1,
    LPCTSTR pstrName = NULL,
    LPSECURITY_ATTRIBUTES lpsaAttributes = NULL);

Parametreler

lInitialCount
Semafor için ilk kullanım sayısı. 0'dan büyük veya buna eşit ve lMaxCount değerinden küçük veya buna eşit olmalıdır.

lMaxCount
Semafor için maksimum kullanım sayısı. 0'dan büyük olmalıdır.

pstrName
Semaforun adı. Semafora işlem sınırları boyunca erişilecekse sağlanmalıdır. ise NULL, nesnenin adı kaldırılacaktır. Ad mevcut bir semaforla eşleşiyorsa, oluşturucu bu adın semaforunu başvuruda bulunan yeni CSemaphore bir nesne oluşturur. Ad, semafor olmayan mevcut bir eşitleme nesnesiyle eşleşirse, yapı başarısız olur.

lpsaAttributes
Semafor 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 CSemaphore 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.

Önemli

Nesneyi oluşturduktan CSemaphore 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