Aracılığıyla paylaş


Eşitleme veri yapıları

Birden çok iş parçacığı için paylaşılan veri erişimini eşitlemek olanak sağlayan birkaç veri yapılarını eşzamanlılık çalışma zamanı sağlar. Seyrek değiştirmek veri paylaştırdığınız zaman, bu veri yapıları yararlıdır. Örneğin, önemli bir bölümü, bir eşitleme nesnesi paylaştırılmış kaynağın kullanılabilir duruma gelene kadar beklemek, diğer iş neden olur. Bu nedenle, sık kullanılan veri erişimi eşitlemek için böyle bir nesne kullanırsanız, uygulamanızda ölçeklenebilirlik kaybedebilirsiniz. Paralel Desenler kitaplığının (ppl) Sağlayan concurrency::combinable birden çok iş parçacığı veya görevleri eşitleme gerek kalmadan arasında kaynak paylaşımı sağlayan sınıf. combinable sınıfı hakkında daha fazla bilgi için, bkz. Paralel kapsayıcıları ve nesneleri.

Bölümler

Bu konuda, aşağıdaki zaman uyumsuz ileti bloğu türleri ayrıntılı açıklanmaktadır:

  • critical_section

  • reader_writer_lock

  • scoped_lock ve scoped_lock_read

  • Olay

critical_section

Concurrency::critical_section onları preempting yerine başka görevler veren işbirliği yapan Karşılıklı dışlama nesne sınıfı gösterir. Kritik bölüm birden çok iş parçacığı özel okuma ve yazma erişimi için paylaşılan veri gerektiğinde kullanışlıdır.

critical_section Yeniden kullanılabilirlikleri olmayan bir sınıftır. Concurrency::critical_section::lock yöntemi bir özel durum türü atar concurrency::improper_lock zaten kilit sahibi olan iş parçacığı tarafından çağrılırsa.

Dd492638.collapse_all(tr-tr,VS.110).gifYöntemleri ve özellikleri

Aşağıdaki tabloda tanımlanır önemli yöntemleri gösterilmektedir critical_section sınıfı.

Method

Description

kilitleme

Kritik bölüm kapsar. Kilit edinme kadar arama içerik blokları.

try_lock

Kritik bölüm almaya çalışır, ancak engelleyecek.

kilidini açma

Kritik bölüm yayımlar.

Top

reader_writer_lock

Concurrency::reader_writer_lock sınıfı, iş parçacığı güvenli okuma/yazma işlemleri için paylaşılan veri sağlar. Çoklu iş parçacıklarını eşzamanlı okuma paylaşılan kaynağa erişmesi ama nadiren bu paylaştırılmış kaynağa yazma Okuyucu/Yazıcı kilit kullanın. Bu sınıf yalnızca bir iş parçacığının yazma nesneye herhangi bir anda erişmenizi sağlar.

reader_writer_lock Sınıfı gerçekleştirebilir daha iyi critical_section çünkü sınıf bir critical_section nesne eşzamanlı okuma erişimi engelleyen bir paylaşılan kaynağa erişim sağlayamadığından isteklerdir.

Gibi critical_section sınıfı reader_writer_lock onları preempting yerine başka görevler veren işbirliği yapan Karşılıklı dışlama nesne sınıfı gösterir.

Paylaşılan kaynağa yazmalısınız bir iş parçacığı bir okuyucu/yazıcı kilit ettiğinde de kaynağa erişmesi gereken diğer iş yazan kilidi serbest bırakıncaya engellenir. reader_writer_lock Sınıfının örneği olan bir yazma tercih önce bekliyor okuyucular engelini kaldırır, bekleyen yazarlar engelini kaldırır LOCK kilitle.

Gibi critical_section sınıfı reader_writer_lock yeniden kullanılabilirlikleri olmayan bir sınıftır. Concurrency::reader_writer_lock::lock ve concurrency::reader_writer_lock::lock_read yöntemi bir özel durum türü throw improper_lock , zaten kilit sahibi bir iş parçacığı tarafından verilir.

Not

Çünkü reader_writer_lock sınıfı yeniden kullanılabilirlikleri olmayan, salt okunur bir kilit bir okuyucu/yazıcı kilit yükseltme ya da salt okunur bir Kilitle Okuyucu/Yazıcı kilit sunulmuyor.Bu işlemlerden birini gerçekleştirerek, belirsiz davranış üretir.

Dd492638.collapse_all(tr-tr,VS.110).gifYöntemleri ve özellikleri

Aşağıdaki tabloda tanımlanır önemli yöntemleri gösterilmektedir reader_writer_lock sınıfı.

Method

Description

kilitleme

Kilit okuma/yazma erişimi kapsar.

try_lock

Okuma/yazma erişimi kilidi almaya çalışır, ancak engelleyecek.

lock_read

Kilit salt okunur erişimi kapsar.

try_lock_read

Salt okunur erişim kilidi almaya çalışır, ancak engelleyecek.

kilidini açma

Kilidi kaldırır.

Top

scoped_lock ve scoped_lock_read

critical_section Ve reader_writer_lock Karşılıklı dışlama nesneleri ile çalışma şeklinizi basitleştirmek iç içe yardımcı sınıflar sınıfları sağlar. Bu yardımcı sınıf olarak bilinen kilitleri kapsamlı.

critical_section Sınıf içeren concurrency::critical_section::scoped_lock sınıfı. Erişim sağlanan kurucu edinme critical_section nesne; Bu nesneye erişimi yıkıcı yayımlar. reader_writer_lock Sınıf içeren concurrency::reader_writer_lock::scoped_lock benzer sınıfı critical_section::scoped_lock, sağlanan yazma erişimini yöneten dışında reader_writer_lock nesnesi. reader_writer_lock Sınıfı da içeren concurrency::reader_writer_lock::scoped_lock_read sınıfı. Bu sınıf sağlanan okuma erişimi yöneten reader_writer_lock nesnesi.

Kapsamlı kilitleri ile çalışırken birçok avantaj sağlayan critical_section ve reader_writer_lock el ile nesneleri. Tipik olarak, yığın üzerinde kapsamlı bir kilit ayırır. Kapsamlı bir kilit yok edilir, karşılıklı dışlama nesne erişimi otomatik olarak yayımlar; Bu nedenle, el ile alttaki nesne kilidini değildir. Birden fazla fonksiyon içeren yararlıdır return deyimleri. Kapsamlı kilitleri özel durum-güvenli kod yazma de yardımcı olabilir. Zaman bir throw deyimi neden olan yığın açılımı, herhangi bir etkin kapsamlı LOCK yıkıcı olarak adlandırılır ve bu nedenle Karşılıklı dışlama nesne her zaman doğru serbest.

Not

Kullandığınızda critical_section::scoped_lock, reader_writer_lock::scoped_lock, ve reader_writer_lock::scoped_lock_read sınıfları değil el ile serbest Karşılıklı dışlama alttaki nesneye erişim.Bu, geçersiz bir durumda çalışma zamanı koyabilirsiniz.

Olay

Concurrency::event sınıfı, durumu erdiği veya erdiği olmayan bir eşitleme nesnesi temsil eder. Paylaşılan verilere erişimi korumak amacı ise, kritik bölümler gibi eşitleme nesnelerinde aksine olayların akışını eşitleyin.

event Sınıfı, bir görevin başka bir görev için çalışma tamamlandığında yararlıdır. Örneğin, bir görevin başka bir görev, verileri bir ağ bağlantısı veya bir dosyadan okuma izni olduğunu sinyal.

Dd492638.collapse_all(tr-tr,VS.110).gifYöntemleri ve özellikleri

Aşağıdaki tabloda birkaç tarafından tanımlanan önemli yöntem gösterir event sınıfı.

Method

Description

bekleme

Olay haline erdiği bekler.

set

Olay, sinyal verilmiş durumuna ayarlar.

sıfırlama

Olay erdiği durumuna ayarlar.

wait_for_multiple

Birden çok olay haline erdiği bekler.

Dd492638.collapse_all(tr-tr,VS.110).gifÖrnek

Nasıl kullanılacağını gösteren bir örnek için event sınıfı için bkz: Windows API için eşitleme veri yapılarını karşılaştırma.

Top

İlgili Bölümler