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?
cevap
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.
bir boost :: weak_ptr ile ilgili bir boost :: shared_mutex nedir? –
@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
'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. –
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.
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.
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ı
Evet. Gerçekten çok ilginç bir analiz. Teşekkürler! – GabiMe
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?
- 1. Recursive
- 2. neden C++ 0x standart komitesi destekledi :: shared_mutex?
- 3. std :: boost :: muteksin haritası garip davranışları
- 4. Haskell - Recursive iniş ayrıştırıcısı
- 5. Recursive şablon metaprogramming
- 6. Gradle Recursive alt projeler
- 7. Recursive/iç içe kilitleme
- 8. Emacs Recursive Load
- 9. Oracle Recursive Subquery Factoring dönüştürmek
- 10. Boost
- 11. Boost :: asio ve boost :: thread
- 12. boost :: tokenizer vs boost :: bölme
- 13. 'git submodule güncelleme --init --recursive' VS 'git submodule foreach --recursive git submodule güncelleme --init'
- 14. Recursive Kısmi <T> 2.1
- 15. T-SQL Recursive Seç Dairesel bağımlılık
- 16. Bu grafikteki tüm yollar nasıl alınır? Recursive?
- 17. boost :: function and boost :: bind work
- 18. boost :: boost :: throw_exception nedeniyle derleme yapılamıyor ::
- 19. boost :: range_iterator ve boost :: iterator_range karışıklığı
- 20. Tek tek Boost kütüphaneleri ile derleme, Boost
- 21. boost ruhu
- 22. Boost :: graph
- 23. Boost :: asio,
- 24. Boost :: Archive
- 25. Boost, VS2005
- 26. Boost :: Python and Boost :: ile ilgili sorunlar Sorunlar ::
- 27. SQL Server 2000 Tek takın Tetik Davranış Recursive gibi
- 28. Recursive CTE ... İç içe ebeveyn ile uğraşan/çocuk kaydeder
- 29. boost :: python :: liste uzunluğu
- 30. boost Shared_pointer NULL
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. –
boost: recursive_mutex adlı siteye gittiniz mi? –
Evet ama paylaşılmıyor – GabiMe