Aracılığıyla paylaş


Çoklu İş Parçacığı Kullanımı: Eşitleme Sınıflarını Kullanırken

MFC ile sağlanan çoklu iş parçacığı kullanan sınıflar iki kategoriye ayrılır: eşitleme nesneleri (CSyncObject, CSemaphore, CMutex, CCriticalSection, CEvent) ve eşitleme erişim nesneleri (CMultiLock, CSingleLock).

Eşzamanlama sınıfları, bir kaynağa erişim kaynağın bütünlüğünü sağlamak için denetlenmesi gerektiği zaman kullanılır.Eşzamanlama erişim sınıfları, bu denetimli kaynaklara erişim hakkının kazanılması için kullanılır.Bu konu her bir sınıfın ne zaman kullanılacağını açıklamaktadır.

Hangi eşitleme sınıfını kullanmanız gerektiğini belirlemek için aşağıdaki soruları sorun:

  1. Kaynağa erişebilmesi öncesinde herhangi bir durumun gerçekleşmesi için uygulamanın beklemesi gerekiyor mu (örneğin, bir dosyaya yazılabilmesi için verinin önce iletişim bağlantı noktalarından alınması gereklidir)?

    Evetse, CEvent öğesini kullanın.

  2. Bu kaynağa aynı uygulama içindeki birden fazla iş parçacığı tek seferde erişebilir mi (örneğin, uygulamanız aynı belge üzerinde görünümleri ile en fazla beş pencereye izin verir)?

    Evetse, CSemaphore öğesini kullanın.

  3. Bu kaynağı birden fazla uygulama kullanabilir mi (örneğin, kaynak, bir DLL'de yer alıyor)?

    Evetse CMutex öğesini kullanın.

    Yoksa, CCriticalSection kullanın.

CSyncObject asla doğrudan kullanılmaz.Diğer dört eşitleme sınıfının taban sınıfıdır.

Örnek 1: Üç Eşitleme Sınıfını Kullanma

Örnek olarak, hesapların bağlanmış bir listesini tutan bir uygulamayı alalım.Bu uygulama üç hesabın ayrı pencerelerde incelenmesine izin verir, ancak yalnızca biri belirli bir zamanda güncelleştirilebilir.Bir hesap güncelleştirildiğinde, güncelleştirilmiş veriler ağ üzerinden bir veri arşivine gönderilir.

Bu örnek uygulama, üç eşitleme sınıfı türünün tümünü kullanır.Bir seferde üçe kadar hesabın incelenmesine izin verdiği için, üç görünüm nesnesine erişimi sınırlamak için CSemaphore öğesini kullanır.Dördüncü bir hesabın görüntülenmesi için bir girişim olduğunda, ya uygulama ilk üç pencereden biri kapanana kadar bekler ya da girişim başarısız olur.Bir hesap güncelleştirildiğinde, her seferinde sadece bir hesabın güncelleştirildiğinden emin olmak için uygulama CCriticalSection öğesini kullanır.Güncelleştirme başarılı olduktan sonra, olayın bildirilmesini bekleyen bir iş parçacığını yayımlayan CEvent'i bildirir.Bu iş parçacığı yeni verileri veri arşivine gönderir.

Örnek 2: Eşitleme Erişim Sınıflarını Kullanma

Hangi eşitleme erişim sınıfının kullanımının daha kolay olduğunu belirleyin.Uygulamanız yalnızca tek bir kontrollü kaynağa erişime duyarlı ise, CSingleLock öğesini kullanın.Herhangi bir sayıda kontrollü kaynağa erişmesi gerekiyorsa, CMultiLock kullanın.Örnek 1'de, CSingleLock her durumda tek bir kaynak herhangi belirli bir zamanda gerektiğinden, kullanılabilirdi.

Eşitleme sınıflarının nasıl kullanıldığı hakkında bilgi için bkz. Çoklu İş Parçacığı Kullanımı: Eşitleme Sınıflarını Kullanma.Eşitleme hakkında daha fazla bilgi için Windows SDK içinde Eşitleme konusuna bakın.MFC'de çoklu iş parçacığı kullanımı desteği hakkında daha fazla bilgi için bkz. C++ ve MFC ile Çoklu İş Parçacığı Kullanımı.

Ayrıca bkz.

Kavramlar

C++ ve mfc çoklu kullanım