Ho un po 'di codice con una condizione di gara in esso ... So che si tratta di una condizione di competizione perché non accade in modo coerente e sembra accadere più spesso su macchine dual core .Modi per trovare una condizione di gara
Non succede mai quando sto tracciando. Anche se, c'è la possibilità che potrebbe essere un deadlock pure. Analizzando le fasi di completamento dei log in cui ciò avviene e non si verifica, sono stato in grado di individuare questo bug in una singola funzione. Tuttavia, non so dove sta accadendo la portata della funzione. Non è al massimo livello.
L'aggiunta di istruzioni di registro o punti di interruzione modifica i tempi se si tratta di una condizione di competizione e impedisce che ciò accada.
C'è qualche tecnica che posso utilizzare oltre a ottenere un analizzatore di condizioni di gara che mi consenta di individuare dove sta accadendo?
Questo è in Visual Studio 9, con C++ (della varietà non gestita).
L'ultima volta che ho avuto un grave condizione di gara, sapevo a livello locale dove stava avvenendo . L'ho fatto alla "vecchia maniera" e ho fatto ricorso alla rappresentazione grafica degli alberi di chiamata e all'evidenziazione delle durate dei blocchi per ogni chiamata a mano. Nel mio caso è stato relegato a 2 file sorgente e una manciata di funzioni, ma si è rivelato inestimabile. –