Como dice el título: ¿Cómo prueba y compara adecuadamente diferentes implementaciones de mutexes en c ++?
Esencialmente escribí mi propia clase std :: mutex para un proyecto que se ejecuta en un núcleo 2, armv7 con el objetivo de minimizar la sobrecarga en el caso no disputado. Ahora estoy considerando usar dicho mutex en más lugares y también en arquitecturas diferentes, pero antes de hacer esto me gustaría asegurarme de que
- en realidad es correcto
- No hay ningún caso patológico en el que funcione mucho peor que un estándar std :: mutex.
Obviamente, escribí algunas pruebas unitarias básicas y micro puntos de referencia y todo parece funcionar, pero en el código multiproceso "parece funcionar" no me da una gran comodidad.
- Entonces, ¿existen técnicas establecidas de análisis estático o dinámico?
- ¿Cuáles son las dificultades comunes al escribir pruebas unitarias para clases mutex?
- ¿Cuáles son los casos límite típicos que uno debe tener en cuenta (en cuanto al rendimiento)?
Solo estoy usando tipos de biblioteca estándar para la implementación, que incluye operaciones de carga y almacenamiento no secuenciales consistentes en atómicas. Sin embargo, estoy principalmente interesado en los consejos agnósticos de implementación, ya que también me gustaría usar el mismo arnés de prueba para otras implementaciones.
Respuestas:
El problema es complejo:
Algunas fuentes de complejidad incluyen:
fuente
Su idea es muy interesante: un punto de referencia de cumplimiento con el que se podría probar una implementación de mutex.
Desafortunadamente, por lo que pude ver, no hay un punto de referencia de cumplimiento ampliamente conocido para las implementaciones de mutex. Entonces, supongo que tiene en sus manos el problema muy interesante de crear una propuesta para tal punto de referencia de cumplimiento.
Y, dado que ha estado involucrado en la creación de una implementación de referencia, usted es el tipo.
Si me permite una sugerencia, tal vez podría comenzar esta investigación con el estándar POSIX para hilos en un lado, y algún estudio de la literatura teórica del procesamiento concurrente, como CSP o procesos secuenciales de comunicación. Este tipo de documentos generalmente se ocupa de los problemas concurrentes clásicos, como los Dining Philosophers.
Supongo que una implementación de ellos podría ser una parte interesante de su punto de referencia de cumplimiento.
fuente