Multicore und Synchronisation

Welche Aussage zu einem Data Race (Datenwettlauf) ist richtig?

  1. AMehrere Threads lesen nur gleichzeitig dieselbe Variable
  2. BEin Thread schreibt zweimal hintereinander in dieselbe Variable
  3. CMehrere Threads greifen ohne Synchronisation gleichzeitig auf dieselbe Variable zu, und mindestens einer davon schreibt
Antwort und Erläuterung anzeigen

Antwort: C. Mehrere Threads greifen ohne Synchronisation gleichzeitig auf dieselbe Variable zu, und mindestens einer davon schreibt

Ein Data Race ist ein Zustand, in dem die Reihenfolge von Lese- und Schreibzugriffen auf dieselbe Stelle nicht durch Synchronisation festgelegt ist und das Ergebnis davon abhängt, in welcher Reihenfolge ausgeführt wurde. Da er je nach Timing auftritt oder nicht, ist er ein schwer durch Tests zu findender Fehler. In C und C++ ist das Verhalten von Programmen mit Data Race undefiniert. Die Reihenfolge muss durch Sperren oder atomare Variablen festgelegt werden.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Wird der obige Code gleichzeitig in zwei Threads ausgeführt, kann der Endwert von counter kleiner als 200000 sein. Welcher Grund ist richtig?
  2. Welche Aussage zu atomaren Befehlen (unteilbaren Befehlen) ist richtig?
  3. Wie arbeitet der atomare Befehl CAS (Compare-and-Swap)?
  4. Der obige Code verdoppelt die gemeinsame Variable counter mit CAS(&p, erwarteter Wert, neuer Wert). Wann schlägt CAS fehl und die Schleife wird wiederholt?
  5. Wann schlägt bei einem Befehlspaar wie LR/SC (Load-Reserved/Store-Conditional) von RISC-V das SC (Store-Conditional) fehl?

Vergleiche zu diesem Thema