Parece que el shared_mutex de Boost no es recursivo ... ¿Hay alguna forma de evitar esto? (sin volver a implementar todo el material)BOOST: recursivo shared_mutex?
Respuesta
En esos casos, deberá usar shared_ptr. Ponga su mutex en un shared_ptr y hará ref-count en su mutex, lo que le dará resultados similares.
¿cómo es un impulso :: weak_ptr relacionado con un impulso :: shared_mutex? –
@Sam, lo siento, pensé en algo y escribí otro por completo. He editado mi publicación para que sea más clara/correcta. – Gianni
'shared_ptr' no tiene nada que ver con la pregunta. La pregunta no se trata de compartir el objeto físico (que 'shared_ptr' permite) sino la propiedad compartida y resursiva del bloqueo (un concepto de sincronización en lugar de un objeto C++). –
boost :: recursive mutex es exclusivo. Creo que necesitarás extender shared_mutex. Puede mantener el ID del hilo actual en un conjunto y verificar si existe en el conjunto de la función que proporciona el bloqueo.
He estado en esta calle personalmente antes. La respuesta simple es no, no hay shared_recursive_mutex.
Realmente no estoy de acuerdo con lo que otros le dirán acerca de cómo los mutex recursivos son generalmente una mala idea, sin duda puede ahorrar algo de tiempo y evitar algunos errores. Sin embargo, si no desea implementar su propio shared_recursive_mutex, tendrá que quedarse con mutexes no recursivos. No es tan malo.
echar un vistazo a this thread y este excellent explanation por qué shared_mutex
es una mala idea en general. entonces, si no está de acuerdo con que recursive_mutex
también es una mala idea, simplemente úselo sin ninguna nitidez porque no le puede dar ningún aumento de rendimiento. recibirás incluso un código un poco más limpio sin cambios importantes.
Traté de usar shared_mutex en mi proyecto para bloquear el mapa altamente controvertido cuando muchos hilos suelen leer datos y rara vez lo modifican. recibió resultados de rendimiento un poco peores
Sí. análisis muy interesante de hecho. ¡Gracias! – GabiMe
Estoy parcialmente en desacuerdo con Andy que shared_mutex es una mala idea porque depende de su diseño, es decir, cómo lo usa en su programa. Creo que si haces lecturas frecuentes con mutex compartido, puede brindarte un rendimiento más eficiente que si hubieras utilizado mutex simple para bloqueos cortos más frecuentes para leer con escrituras raras. Entonces shared_mutex es una forma de hacer algo largo simultáneamente. Y no creo que un candado largo sea un mal diseño en este caso.
¿Me apoya o estoy equivocado?
- 1. boost :: variante problema recursivo
- 2. ¿por qué el comité estándar de C++ 0x rechazó boost :: shared_mutex?
- 3. Boost shared_lock. Leer preferido?
- 4. C++ murs recursivo :: ¿problema igual?
- 5. mensaje propio (no recursivo) vs mensaje recursivo auto
- 6. ¿Cómo determinar si un idioma es recursivo o recursivo enumerable?
- 7. TreeView recursivo en ASP.NET
- 8. bash recursivo xtrace
- 9. Os.walk no recursivo()
- 10. Cuándo usar mutex recursivo?
- 11. PostgreSQL recursivo con
- 12. ¿Refactorizar este método recursivo?
- 13. ¿Block_copy es recursivo?
- 14. recursivo (doall) en clojure
- 15. Hacer recursivo en seco
- 16. rubí recursivo regex
- 17. ¿SVN Global ignore recursivo?
- 18. svn propset recursivo
- 19. Actualización de boost :: shared_lock al bloqueo exclusivo
- 20. Cómo "desenrollar" una estructura "recursivo"
- 21. Prevención del recursivo C# inclusión
- 22. Jinja2 bucle recursivo vs diccionario
- 23. Archivos ocultos de borrado recursivo
- 24. principal recursivo(): ¿por qué segfault?
- 25. Estudio visual recursivo Copiar local
- 26. PHP ruta del directorio recursivo
- 27. ¿Se puede llamar esto recursivo?
- 28. Cómo lograr un deftype recursivo
- 29. SED recursivo en archivos específicos
- 30. descendente recursivo simple en PyParsing
Antes de seguir este camino, es posible que desee leer lo que [otros piensan] (http://www.zaval.org/resources/library/butenhof1.html) sobre mutexes recursivos. –
has mirado a boost: recursive_mutex? –
Sí, pero no se ha compartido – GabiMe