Definition

Prozess: Abstraktion eines Programmes: Rechnend, Wartend, Rechenbereit. Eigener Adressraum.

Tread: Gehört zu einem Prozess, teilt dessen Addressraum -> gemeinsame Variablen möglich.

Probleme

Race Condition:

Mehrere Threads die lesend/schreibend auf dieselbe Speicherzelle zugreifen.
Führt zu nicht deterministischem Verhalten.

Deadlock:

Mehrere Threads die jeweils aufeinander warten.
Synchronisation (aktive Beeinflussing der Abarbeitungsreihenfolge) durch atomare Datentypen/Mutex/Semaphoren/Barrieren verhindert Deadlocks.

Atomare Datentypen: Kein Anderen Thread kann eine Operation durchführen, solange die Atomare Operation durchgeführt wird. zB. AtomicInteger in Java.

Mutex Lock: Sorgt dafür dass ein Teil des Quellcodes nur von einem Thread gleichzeitig ausgeführt werden kann.

Semaphore: Funktioniert ähnlich wie ein Mutex Lock, erlaubt aber die gleichzeitige Ausführung durch $n$ Threads

Pipe: Auch Queue. Funktioniert sehr gut mit Threads, wenn Daten organisiert werden müssen.

Barriere: Blockiert alle ankommenden Threads, bis $n$ Threads die Barriere erreicht haben.

Implementierungen

Treadpool:

Eine Gruppe von Threads. Jeder Thread schläft bis er eine Aufgabe bekommt. Nach Beendigung kehrt er in den Pool zurück. Umgeht vor allem aufwendiges Starten und Beenden von Threads.

Futures:

Ein Future steht als Platzhalter für noch nicht verfügbare Daten. Es blockiert bei Zugriff solange, bis (meist durch einen anderen Thread) die Daten zur Verfügung stehen.