2010-07-22 18 views
12

Boost'un shared_mutex'inin özyinelemediği gözüküyor. Bu konuda yine de var mı? (tüm öğeleri yeniden uygulayamadan)BOOST: recursive shared_mutex?

+7

Bu yoldan aşağı inmeden önce, diğerlerinin (http://www.zaval.org/resources/library/butenhof1.html) yinelemeli muteksler hakkında ne düşündüğünü okumak isteyebilirsiniz. –

+1

boost: recursive_mutex adlı siteye gittiniz mi? –

+1

Evet ama paylaşılmıyor – GabiMe

cevap

-3

Bu durumlarda shared_ptr kullanmanız gerekir. Muteksinizi bir shared_ptr'ye koyun ve sizin muteksinizde tekrar sayım yaparsınız, bu da size simmilar sonuçları verir.

+0

bir boost :: weak_ptr ile ilgili bir boost :: shared_mutex nedir? –

+0

@Sam Üzgünüm, bir şey düşündüm ve tamamen başka bir şey yazdım. Yayınımı daha açık/düzeltmek için düzenledim. – Gianni

+3

'shared_ptr' sorusuyla ilgisi yoktur. Soru, fiziksel nesnenin ('shared_ptr'nin izin verdiği) paylaşımıyla değil, kilidin (C++ nesnesinden ziyade bir senkronizasyon kavramı) paylaşılmış ve özdeş mülkiyetinin paylaşımıyla ilgili değildir. –

0

boost :: yinelemeli mutex özeldir. Bence shared_mutex'i genişletmeniz gerekecek. Geçerli iş parçacığı kimliğini bir kümede saklayabilir ve işlev sağlama kilidindeki kümede var olup olmadığını kontrol edebilirsiniz.

0

Bu yolda daha önce şahsen bulundum. Basit cevap hayır, shared_recursive_mutex yok.

Diğerlerinin, yinelemeli mutekslerin genellikle kötü bir fikir olduğu konusunda size neler söyleyeceğine gerçekten katılıyorum, kesinlikle zamandan tasarruf edebilir ve bazı hataları önleyebilir. Bununla birlikte, kendi shared_recursive_mutex'inizi uygulamak istemiyorsanız, yinelemeli mutekslerle uğraşmanız gerekir. O kadar da kötü değil.

7

this thread'a bakın ve bu excellent explanation neden shared_mutex genel olarak kötü bir fikirdir. Bu yüzden recursive_mutex'un da kötü bir fikir olduğunu kabul etmiyorsanız, herhangi bir performans artışı sağlayamadığından, keskinliği hassasiyeti olmadan kullanın. Büyük değişiklikler olmadan bile biraz daha temiz kod alırsınız.

Birçok iş parçacığı genellikle veri okuduğunda ve nadiren değiştirdiğinde, yüksek oranda çakışan haritayı kilitlemek için projemde shared_mutex kullanmayı denedim. biraz daha kötü performans sonuçları aldı

+0

Evet. Gerçekten çok ilginç bir analiz. Teşekkürler! – GabiMe

1

Paylaşımınıza bağlı olduğundan, yani programınızda nasıl kullanıldığından, shared_mutex'in kötü bir fikir olduğu Andy'ye katılmıyorum. Paylaşılan muteks ile uzun süreli okumalar yaparsanız, nadir yazılarla okumak için kısa ve sık kullanılan kilitler için basit muteks kullanmış olmanızdan daha verimli bir performans sağlayacağınıza inanıyorum. Yani shared_mutex aynı anda uzun bir şey yapmanın bir yoludur. Ve bu durumda uzun bir kilidin kötü bir tasarım olduğunu düşünmüyorum.

Bana destek oluyor musunuz yoksa yanılıyor muyum?