Threads laufen parallel auf dem Rechner, ähnlich wie Prozesse.
Im Prinzip besteht jeder Prozess aus mindestens einem Thread. Der Vorteil von Threads ist, dass diese sich innerhalb eines Prozesses den Speicherbereich und die Umgebung (Umgebungsvariable, Userkennung usw.) teilen und verschiedene Teilaufgaben parallel verarbeiten können.
Durch Threads, kann ein Prozess mehrere Aktionen gleichzeitig durchführen, ohne diese Sequenziell abarbeiten zu müssen. Zum Beispiel wartet ein Thread auf die Ergebnisse von der Festplatte, während der andere schon die nächste Usereingabe abfragen kann und ähnliches.
Da sich die Threads einen Speicherbereich teilen, muss unbedingt verhindert werden, dass diese Parallel den gleichen Speicherbereich beschreiben. Die Kommunikation der Threads läuft meistens über Speicherbereiche, die sich die Threads teilen. Diese Bereiche kann sich ein Thread mit einem Mutex oder einer Semaphore kurzzeitig(hoffentlich...) für sich beanspruchen und die anderen Threads warten (bleiben stehen...Suspend), wenn diese nun auch diesen Bereich auch lesen oder bearbeiten wollen.
Problematisch wird es beispielsweise, wenn ein Prozess zwei Threads mit zwei Speicherbereichen hat und nun gliechzeitig folgendes passiert:
Thread 1 nimmt sich nun den Speicherbereich 1
Thread 2 nimmt sich nun den Speicherbereich 2
anschließend wollen beide (praktisch gleichzeig) folgendes tun:
Thread 1 will nun auch Speicherbereich 2 haben
Thread 2 will nun Speicherbereich 1 haben
Jetzt warten die beiden Threads endlos aufeinander (Suspended) und es entsteht ein Dead-Lock!
Um solche Probleme zu verhindern, gibt es verschiedene Ansätze. Der einfachste Ansatz ist, dass es eine festgelegte Reihenfolge gibt, nachdem Gelocked wird. D. h. wenn ein Thread mehrere Speicherbereiche haben möchte, reserviert er diese immer Aufsteigend (oder Absteigend... egal... hauptsächlich einheitlich) . Leider ist dieser Ansatz in der Praxis schwer durchzuhalten oder einer der Programmierer kannte diese Vorgabe nicht und tut es eben falsch.
Ich hoffe, das erklärt es (vereinfacht) in Grundzügen.
Gruss
Chris