2008-11-24 11 views
7

Hemos estado tratando de encontrar algunos problemas de corrupción de montón en nuestras aplicaciones multiproceso de C++. Como una técnica, tratamos de agregar -lmcheck a la línea de bibliotecas de la aplicación. Esto está causando que la aplicación se bloquee con aparente corrupción de montón en relativamente poco tiempo.opción '-lmcheck' de glibc y multiprocesamiento

Nuestra aplicación utiliza malloc/free y new/delete (según corresponda).

Uno de nuestro equipo se preguntó si -lmcheck en realidad era seguro para subprocesos, y puso un mutex alrededor de todas las llamadas malloc/free. Los accidentes se fueron.

¿Alguien sabe si -lmcheck se supone que es compatible con multi-threading? Me pregunto si simplemente comprendemos mal la herramienta que estamos tratando de utilizar y, por lo tanto, nos causamos preocupaciones innecesarias.

Respuesta

7

No, mcheck no es seguro para subprocesos y no debe utilizarse con aplicaciones de subprocesos múltiples. Hacerlo puede presentar problemas adicionales ya que no hay sincronización entre los hilos. Aquí está la respuesta de Ulrich Drepper (mantenedor de glibc) sobre el tema hace unos meses:

mcheck no funciona para código de subprocesos múltiples. No puede posiblemente hacerlo. No hay manera de reparar esto con la tecnología subyacente mcheck.

+0

Interesante. ¿Significa eso que la "solución" del interrogador, aunque parece haber evitado los bloqueos, no es realmente válida, y que mcheck no puede ayudarlo con su aplicación? –

+0

No sé lo suficiente acerca de la implementación actual de mcheck o los cambios que se hicieron en el código que se está probando para responder esa pregunta, pero probablemente me mantendría alejado de ella y encontraría otras herramientas para usar en su lugar. –

0

Como alternativa, puedo recomendar valgrind - funcionará con aplicaciones multiproceso - aunque emula hilos, en realidad no usa hilos.