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.
sınıfının CSemaphore nesnesi bir "semaforu" temsil eder. Semafor, paylaşılan kaynaklara erişimi denetleyen ve yarış koşullarını engelleyen bir 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 diğer 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. Denetimli kaynağa erişiminiz bittiğinde arayın CSyncObject::Unlock .
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ı, en yüksek erişim sayısını, semaforun adını (işlem sınırları arasında kullanılıyorsa) 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ığı güvenli bir şekilde erişilir. 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
CSemaphore
Gereksinimler
Üst bilgi: afxmt.h
CSemaphore::CSemafor
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şiliyorsa 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şiyorsa, 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 nesnenin Lock ve Üyenin kilidini açma işlevlerini çağırarak.
Önemli
Nesnesini oluşturduktan CSemaphore sonra mutex'in mevcut olmadığından emin olmak için kullanın GetLastError . 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.