Çoklu İş Parçacığı Kullanımı: MFC Eşitleme Sınıfları Ne Zaman Kullanılır?
MFC ile sağlanan çok iş parçacıklı sınıflar iki kategoriye ayrılır: eşitleme nesneleri (CSyncObject, CSemaphore, CMutex, CCriticalSection ve CEvent) ve eşitleme erişim nesneleri (CMultiLock ve CSingleLock).
Eşitleme sınıfları, kaynağın bütünlüğünü sağlamak için kaynağa erişimin denetlenmesi gerektiğinde kullanılır. Eşitleme erişim sınıfları, bu denetlenen kaynaklara erişim elde etmek için kullanılır. Bu konuda, her sınıfın ne zaman kullanılacağı açıklanmaktadır.
Hangi eşitleme sınıfını kullanmanız gerektiğini belirlemek için aşağıdaki soru dizisini sorun:
Uygulamanın kaynağa erişebilmesi için bir şeyin gerçekleşmesini beklemesi gerekiyor mu (örneğin, verilerin dosyaya yazılabilmesi için önce bir iletişim bağlantı noktasından alınması gerekir)?
Evet ise kullanın
CEvent
.Aynı uygulama içindeki birden fazla iş parçacığı bu kaynağa aynı anda erişebilir mi (örneğin, uygulamanız aynı belge üzerinde görünümleri olan en fazla beş pencereye izin verir)?
Evet ise kullanın
CSemaphore
.Bu kaynağı birden fazla uygulama kullanabilir mi (örneğin, kaynak bir DLL'dedir)?
Evet ise kullanın
CMutex
.Hayır ise kullanın
CCriticalSection
.
CSyncObject
hiçbir zaman doğrudan kullanılmaz. Diğer dört eşitleme sınıfı için temel sınıftır.
Örnek 1: Üç Eşitleme Sınıfı Kullanma
Örnek olarak, bağlı bir hesap listesi tutan bir uygulama alın. Bu uygulama, ayrı pencerelerde en fazla üç hesabın incelenmesine izin verir, ancak herhangi bir zamanda yalnızca bir hesap 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ü de kullanır. Aynı anda en fazla üç hesabın incelenmesine izin verdiğinden, erişimi üç görünüm nesnesiyle sınırlamak için kullanır CSemaphore
. Dördüncü bir hesabı görüntüleme girişimi gerçekleştiğinde, uygulama ilk üç pencereden biri kapanana kadar bekler veya başarısız olur. Bir hesap güncelleştirildiğinde, uygulama aynı anda yalnızca bir hesabın güncelleştirildiğinden emin olmak için kullanır CCriticalSection
. Güncelleştirme başarılı olduktan sonra sinyal verir CEvent
ve bu da olayın işaretlenmesi için bekleyen bir iş parçacığını serbest bırakır. Bu iş parçacığı yeni verileri veri arşivine gönderir.
Örnek 2: Eşitleme Erişim Sınıflarını Kullanma
Kullanılacak eşitleme erişim sınıfını seçmek daha da kolaydır. Uygulamanız yalnızca tek bir denetimli kaynağa erişmekle ilgileniyorsa kullanın CSingleLock
. Bir dizi denetimli kaynaklardan birine erişmesi gerekiyorsa kullanın CMultiLock
. Örnek 1'de, CSingleLock
her durumda belirli bir zamanda yalnızca bir kaynağa ihtiyaç duyulduğu için kullanılmış olabilir.
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 bilgi için bkz . Windows SDK'sında eşitleme . MFC'de çoklu iş parçacığı desteği hakkında bilgi için bkz . C++ ve MFC ile çoklu iş parçacığı kullanımı.