mehrere Threads arbeiten "gleichzeitig" und ohne gegenseitige Synchronisation mit denselben Daten ("Race Condition")
int counter = 0; void *thread_func(void *args) /* zählt Zahl der Aufrufe */ { counter++; }
Genauer:
load a (a := counter) increment a (a++ ) save a (counter := a)
mögliches zeitliches Verhalten, wenn zwei Threads thread_func aufrufen:
Takt Thread 0 Thread 1 counter Bemerkung 314 load a0 42 315 increment a0 42 316 load a1 42 Context-Switch 317 increment a1 42 318 save a1 43 319 save a0 43 Context-Switch
Trotz zweifachen Aufrufs von thread_func wird counter nur um 1 erhöht!