Tengo un poco de código con una condición de carrera ... Sé que es una condición de carrera porque no ocurre de manera constante, y parece ocurrir más a menudo en máquinas de doble núcleo .Formas de encontrar una condición de carrera
Nunca sucede cuando estoy rastreando. Aunque existe la posibilidad de que también sea un punto muerto. Al analizar las etapas de finalización de los registros donde esto ocurre y no ocurre, he podido localizar este error en una sola función. Sin embargo, no sé en qué parte de la función esto está sucediendo. No está en el nivel superior.
Agregar declaraciones de registro o puntos de interrupción va a cambiar el tiempo si se trata de una condición de carrera, y evitar que esto suceda.
¿Existe alguna técnica que pueda usarse aparte de la obtención de un analizador de condiciones de carrera que me permita identificar dónde ocurre esto?
Esto está en el estudio visual 9, con C++ (de la variedad no administrada).
última vez que tuve una condición de carrera en serio, sabía local donde se estaba produciendo . Lo hice a la "manera antigua" y recurrí a gráficos de árboles de llamadas y resaltar las duraciones de bloqueo para cada llamada a mano. En mi caso, fue relegado a 2 archivos fuente y un puñado de funciones, pero resultó invaluable. –