Eşitleme Veri Yapıları
Eşzamanlılık Çalışma Zamanı, birden çok iş parçacığından paylaşılan verilere erişimi eşitlemenize olanak sağlayan çeşitli veri yapıları sağlar. Bu veri yapıları, sık sık değiştirdiğiniz verileri paylaştığınızda kullanışlıdır. Eşitleme nesnesi, örneğin kritik bir bölüm, diğer iş parçacıklarının paylaşılan kaynak kullanılabilir olana kadar beklemesine neden olur. Bu nedenle, sık kullanılan verilere erişimi eşitlemek için böyle bir nesne kullanırsanız, uygulamanızda ölçeklenebilirliği kaybedebilirsiniz. Paralel Desenler Kitaplığı (PPL), eşitlemeye gerek kalmadan çeşitli iş parçacıkları veya görevler arasında bir kaynağı paylaşmanızı sağlayan eşzamanlılık::combinable sınıfını sağlar. sınıfı hakkında combinable
daha fazla bilgi için bkz . Paralel Kapsayıcılar ve Nesneler.
Bölümler
Bu konuda, aşağıdaki zaman uyumsuz ileti bloğu türleri ayrıntılı olarak açıklanmaktadır:
critical_section
concurrency::critical_section sınıfı, diğer görevlere ön yükleme yerine veren ortak bir karşılıklı dışlama nesnesini temsil eder. Kritik bölümler, birden çok iş parçacığı paylaşılan verilere özel okuma ve yazma erişimi gerektirdiğinde yararlıdır.
Sınıf critical_section
yeniden girişli değil. Eşzamanlılık::critical_section::lock yöntemi, zaten kilidin sahibi olan iş parçacığı tarafından çağrılırsa eşzamanlılık::improper_lock türünde bir özel durum oluşturur.
Yöntemler ve Özellikler
Aşağıdaki tabloda sınıfı tarafından critical_section
tanımlanan önemli yöntemler gösterilmektedir.
Metot | Açıklama |
---|---|
lock | Kritik bölümü alır. Çağrı bağlamı, kilidi alana kadar engeller. |
try_lock | Kritik bölümü almaya çalışır, ancak engellemez. |
kilidi açmak | Kritik bölümü serbest bırakır. |
[Üst]
reader_writer_lock
concurrency::reader_writer_lock sınıfı, paylaşılan verilere iş parçacığı güvenli okuma/yazma işlemleri sağlar. Birden çok iş parçacığı paylaşılan kaynağa eşzamanlı okuma erişimi gerektirdiğinde ancak bu paylaşılan kaynağa nadiren yazıldığında okuyucu/yazıcı kilitlerini kullanın. Bu sınıf, bir nesneye her zaman yalnızca bir iş parçacığı yazma erişimi verir.
Bir reader_writer_lock
nesne paylaşılan bir kaynağa özel erişim elde ettiğinden critical_section
, eşzamanlı okuma erişimini önleyen sınıfı sınıfından critical_section
daha iyi bir performans sergileyebilir.
critical_section
sınıfı gibi, reader_writer_lock
sınıfı da bunları önceden uygulamak yerine diğer görevlere veren işbirliğine dayalı bir karşılıklı dışlama nesnesini temsil eder.
Paylaşılan bir kaynağa yazması gereken bir iş parçacığı okuyucu/yazıcı kilidi alırsa, yazıcı kilidi bırakana kadar kaynağa erişmesi gereken diğer iş parçacıkları engellenir. sınıfı reader_writer_lock
, bekleyen okuyucuların engellemesini kaldırmadan önce bekleyen yazarların engellemesini kaldıran bir kilit olan yazma tercihi kilidi örneğidir.
Sınıfı gibi critical_section
sınıf reader_writer_lock
da yeniden girişsizdir. Eşzamanlılık::reader_writer_lock::lock ve eşzamanlılık::reader_writer_lock::lock_read yöntemleri, zaten kilidin sahibi olan bir iş parçacığı tarafından çağrılırsa tür improper_lock
özel durumu oluşturur.
Not
reader_writer_lock
Sınıf yeniden girişli olmadığından, salt okunur kilidi okuyucu/yazıcı kilidine yükseltemez veya okuyucu/yazıcı kilidini salt okunur bir kilide düşüremezsiniz. Bu işlemlerden birinin gerçekleştirilmesi belirtilmeyen davranışlar oluşturur.
Yöntemler ve Özellikler
Aşağıdaki tabloda sınıfı tarafından reader_writer_lock
tanımlanan önemli yöntemler gösterilmektedir.
Metot | Açıklama |
---|---|
lock | Kilit için okuma/yazma erişimi alır. |
try_lock | Kilit için okuma/yazma erişimi almaya çalışır, ancak engellemez. |
lock_read | Kilit için salt okunur erişim alır. |
try_lock_read | Kilit için salt okunur erişim elde etmeye çalışır, ancak engellemez. |
kilidi açmak | Kilidi serbest bırakır. |
[Üst]
scoped_lock ve scoped_lock_read
ve reader_writer_lock
sınıfları, critical_section
karşılıklı dışlama nesneleriyle çalışma yönteminizi basitleştiren iç içe yardımcı sınıflar sağlar. Bu yardımcı sınıflar kapsamlı kilitler olarak bilinir.
sınıfı critical_section
eşzamanlılık::critical_section::scoped_lock sınıfını içerir. Oluşturucu, sağlanan critical_section
nesneye erişim alır; yıkıcı bu nesneye erişimi serbest bırakır. sınıfı reader_writer_lock
eşzamanlılık::reader_writer_lock::scoped_lock sınıfını içerir. Bu sınıf, critical_section::scoped_lock
sağlanan reader_writer_lock
nesneye yazma erişimini yönetmesi dışında benzerdir. sınıfı reader_writer_lock
eşzamanlılık::reader_writer_lock::scoped_lock_read sınıfını da içerir. Bu sınıf, sağlanan reader_writer_lock
nesneye okuma erişimini yönetir.
Kapsamlı kilitler, ve reader_writer_lock
nesneleriyle el ile critical_section
çalışırken çeşitli avantajlar sağlar. Genellikle yığında kapsamlı bir kilit ayırırsınız. Kapsamlı bir kilit, yok edildiğinde karşılıklı dışlama nesnesine erişimi otomatik olarak serbest bırakır; bu nedenle, temel alınan nesnenin kilidini el ile açmazsınız. Bu, bir işlev birden çok return
deyim içerdiğinde kullanışlıdır. Kapsamlı kilitler, özel durum güvenli kod yazmanıza da yardımcı olabilir. Bir throw
deyim yığının gevşemesine neden olduğunda, etkin kapsamlı kilitlerin yıkıcısı çağrılır ve bu nedenle karşılıklı dışlama nesnesi her zaman doğru şekilde serbest bırakılır.
Not
, reader_writer_lock::scoped_lock
ve reader_writer_lock::scoped_lock_read
sınıflarını critical_section::scoped_lock
kullandığınızda, temel alınan karşılıklı dışlama nesnesine erişimi el ile serbest bırakmayın. Bu, çalışma zamanını geçersiz bir duruma sokabilir.
event
concurrency::event sınıfı, durumu işaretlenebilen veya işaretlenemeyen bir eşitleme nesnesini temsil eder. Paylaşılan verilere erişimi korumak olan kritik bölümler gibi eşitleme nesnelerinden farklı olarak, olaylar yürütme akışını eşitler.
Sınıfı event
, bir görev başka bir görev için çalışmayı tamamladığında kullanışlıdır. Örneğin, bir görev başka bir göreve bir ağ bağlantısından veya bir dosyadan veri okuduğunu gösterebilir.
Yöntemler ve Özellikler
Aşağıdaki tabloda, sınıfı tarafından tanımlanan önemli yöntemlerin birkaçı event
gösterilmektedir.
Metot | Açıklama |
---|---|
beklemek | Olayın işaretlenmesini bekler. |
set | Olayı sinyalli duruma ayarlar. |
sıfırlama | Olayı sinyalsiz duruma ayarlar. |
wait_for_multiple | Birden çok olayın sinyallemesini bekler. |
Örnek
sınıfının nasıl kullanılacağını event
gösteren bir örnek için bkz . Eşitleme Veri Yapılarını Windows API ile Karşılaştırma.
[Üst]
İlgili Bölümler
Eşitleme Veri Yapılarını Windows API ile Karşılaştırma
Eşitleme veri yapılarının davranışını Windows API tarafından sağlananlarla karşılaştırır.
Eşzamanlılık Çalışma Zamanı
Paralel programlamayı basitleştiren ve ilgili konulara bağlantılar içeren Eşzamanlılık Çalışma Zamanı'nı açıklar.