Ich habe ein bisschen Code mit einer Race-Bedingung drin ... Ich weiß, dass es eine Race-Bedingung ist, weil es nicht konsequent passiert, und es scheint häufiger auf Dual-Core-Maschinen passieren .Möglichkeiten, einen Race Condition zu finden
Es passiert nie, wenn ich verfolgen. Es besteht jedoch die Möglichkeit, dass es auch zu einem Deadlock kommen könnte. Durch das Analysieren von Stadien der Fertigstellung von Protokollen, wo dies geschieht und nicht auftritt, konnte ich diesen Fehler auf eine einzige Funktion genau lokalisieren. Allerdings weiß ich nicht, wo im Rahmen der Funktion dies geschieht. Es ist nicht auf der obersten Ebene.
Das Hinzufügen von Protokollanweisungen oder Haltepunkten ändert das Timing, wenn es sich um eine Race-Bedingung handelt, und verhindert dies.
Gibt es eine Technik, die ich verwenden kann, abgesehen von einem Race Condition Analyzer, mit dem ich genau feststellen kann, wo das passiert?
Dies ist in Visual Studio 9, mit C++ (der nicht verwalteten Variante).
Letztes Mal habe ich einen schweren Rennen Zustand hatte ich vor Ort wusste, wo es auftritt, . Ich habe es auf die "altmodische Art und Weise" gemacht und dazu gegriffen, Anrufbäume grafisch darzustellen und die Sperrzeiten für jeden Anruf von Hand hervorzuheben. In meinem Fall wurde es in 2 Quelldateien und eine Handvoll Funktionen verbannt, aber es erwies sich als unbezahlbar. –