Aracılığıyla paylaş


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.

Yöntem 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.
Kilidini 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.

Dekont

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.

Yöntem 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.
Kilidini 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_locksağ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.

Dekont

, reader_writer_lock::scoped_lockve reader_writer_lock::scoped_lock_read sınıflarını critical_section::scoped_lockkullandığı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.

Yöntem Açıklama
Bekle Olayın işaretlenmesini bekler.
set Olayı sinyalli duruma ayarlar.
Sıfırlamak 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]

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.