Ich versuche, Race-Bedingungen in meinem Code zu vermeiden, und ich arbeite derzeit mit einer einzelnen Hyperthread-CPU, so gibt es zwei logische CPUs, jede mit ihrem eigenen Thread. Wenn mein Verständnis von Hyperthreading korrekt ist, teilen diese Threads die gleichen Ressourcen, aber ihre Aktionen sind tatsächlich zeitaufgelöst, nicht gleichzeitig. Ist es immer noch möglich, dass sich zwischen diesen beiden Hyperthreads Race Conditions ergeben?Kann es ein Rennen zwischen zwei Hyperthreads auf der gleichen CPU geben?
Zum Beispiel gibt es Grund für mich, dies zu ändern:
Connection& connection = connections[num_connections];
... do some stuff
++num_connections;
dazu:
Connection& connection = connections[num_connections++];
... do some stuff
a) Die Unterscheidung zwischen Hyperthreading und Threading ist durch die Threading-Umgebung verborgen. b) Kein Code-Konstrukt ist Thread-sicher. Du wirst so mehr Forschung brauchen. –
Time Slicing ist alles was für Rennen benötigt wird. Es gibt kein mögliches Rennen, das nicht mit der Zeit reproduziert werden kann, die auf einer unicore CPU schneidet. – usr
@usr Nicht von der Frage selbst abzulenken, aber trifft das auf Systeme mit einem entspannten Speichermodell zu? Ich würde denken, dass das Timeclicing eines Unicore nur die sequentielle Konsistenz eines Multicore-Systems emulieren kann. Ich sehe nicht, wie es Race-Bedingungen nachbilden kann, die nur durch Speicher-Neuordnung verursacht werden können. Zurück zur Frage, ich weiß nicht, ob Intel etwas über Speicher-Neuordnung zwischen Hyperthreads auf dem gleichen Kern sagt. Aber klar muss der Programmierer den schlimmsten Fall annehmen. – Mysticial