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!