Was ist aus Performancegründen in Multithread-Code zu vermeiden?

Ich überprüfe / überarbeite derzeit eine Multithread-Anwendung, die Multithread-fähig sein soll, um alle verfügbaren Kerne zu nutzen und theoretisch eine bessere / überlegene Leistung zu erzielen (superior ist der kommerzielle Begriff für better: P).

Was sollte ich bei der Programmierung von Multithread-Anwendungen beachten?

Ich meine Dinge, die die Leistung stark beeinträchtigen, vielleicht sogar bis zu dem Punkt, an dem Sie mit Multithreading überhaupt nichts gewinnen, aber durch die Komplexität des Designs viel verlieren. Was sind die großen roten Fahnen für Multithreading-Anwendungen?

Sollte ich anfangen, die Sperren in Frage zu stellen und nach einer Strategie zum Freigeben von Sperren Ausschau zu halten, oder sind andere Punkte wichtiger, die eine Warnleuchte aufleuchten lassen sollten?

Bearbeiten: Die Art der Antworten, die ich haben möchte, ähnelt der Antwort von Janusz. Ich möchte, dass rote Warnungen im Code nachschlagen. Ich weiß, dass die Anwendung nicht so gut funktioniert, wie sie sollte. Ich muss wissen, wo ich anfangen soll, was sollte mich beunruhigen und wo sollte ich meine Anstrengungen setzen. Ich weiß, dass es sich um eine allgemeine Frage handelt, aber ich kann nicht das gesamte Programm posten. Wenn ich einen Codeabschnitt auswählen könnte, müsste ich nicht erst fragen.

Ich verwende Delphi 7, obwohl die Anwendung für das nächste Jahr in .NET (c #) portiert / remake werden wird, daher höre ich lieber Kommentare, die als allgemeine Praxis gelten, und ob sie für eine der beiden spezifisch sein müssen diese Sprachen

Antworten auf die Frage(12)

Ihre Antwort auf die Frage