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:

kritik_bölüm

concurrency::critical_section sınıfı, diğer görevlere öncelik tanıyan ve işbirliği yapan 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. Concurrency::critical_section::lock yöntemi, zaten kilidin sahibi olan iş parçacığı tarafından çağrılırsa concurrency::improper_lock türünde bir özel durum fırlatır.

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
kilit Kritik bölümü alır. Çağrı bağlamı, kilidi alana kadar bekler.
kilitlemeyi_dene Kritik bölümü almaya çalışır, ancak engellemez.
kilidi açmak Kritik bölümü serbest bırakır.

[Üst]

okuyucu_yazar_kilidi

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, aynı anda yalnızca bir iş parçacığına bir nesneye yazma erişimi verir.

reader_writer_lock sınıfı, critical_section sınıfına kıyasla daha iyi performans gösterebilir çünkü bir critical_section nesnesi, paylaşılan bir kaynağa özel erişim sağlar ve bu da eşzamanlı okuma erişimini önler.

critical_section sınıfı gibi, reader_writer_lock sınıfı da diğer görevlere öncelik tanıyan ve işbirliğine dayanan 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. reader_writer_lock sınıfı, bekleyen okuyucuların engellemesini kaldırmadan önce bekleyen yazarların engellemesini kaldıran bir tür kilit olan yazma öncelikli kilit örneğidir.

critical_section sınıfı gibi, reader_writer_lock sınıfı da yeniden girilemez. concurrency::reader_writer_lock::lock ve concurrency::reader_writer_lock::lock_read yöntemleri, zaten kilidin sahibi olan bir iş parçacığı tarafından çağrıldığında improper_lock türünde bir ö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
kilit Kilit için okuma/yazma erişimi alır.
kilitlemeyi_dene Kilit için okuma/yazma erişimi almaya çalışır, ancak engellemez.
lock_read Kilide salt okunur erişim elde eder.
try_lock_read Kilidi engellemeden salt okunur erişim elde etmeye çalışır.
kilidi açmak Kilidi serbest bırakır.

[Üst]

scoped_lock ve scoped_lock_read

critical_section ve reader_writer_lock sınıfları, karşılıklı dışlama nesneleriyle çalışma yöntemlerinizi basitleştiren iç içe yardımcı sınıflar sunar. Bu yardımcı sınıflara kapsamlı kilitler denir.

critical_section sınıfı, concurrency::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. reader_writer_lock sınıfı ayrıca eşzamanlılık::reader_writer_lock::scoped_lock_read sınıfını içerir. Bu sınıf, sağlanan reader_writer_lock nesneye okuma erişimini yönetir.

Kapsamlı kilitler, critical_section ve reader_writer_lock nesneleriyle manuel çalışırken çeşitli avantajlar sağlar. Genellikle yığın üzerinde kapsamlı bir kilit tanımlarsı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 ifadesi yığının çözülmesine neden olduğunda, aktif kapsamlı kilidin 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

critical_section::scoped_lock, reader_writer_lock::scoped_lock ve reader_writer_lock::scoped_lock_read sınıflarını 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.

etkinlik

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.

event sınıfı, bir görev başka bir görev için çalışmasını 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 tablo, event sınıfı tarafından tanımlanan önemli metotların birkaçını gösterir.

Metot Açıklama
beklemek Olayın sinyal verilmesini bekler.
ayarla Olayı sinyalli duruma ayarlar.
sıfırlama Olayı sinyalsiz duruma ayarlar.
wait_for_multiple Birden çok olayın sinyallenmesini 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.