Forum: PC-Programmierung Thread und Deadlock


von meitrixs (Gast)


Lesenswert?

Kann mir jemand erklären was ein Deadlock ist, wie er entsteht, und wie 
man ihn vermeiden kann?

von yalu (Gast)


Lesenswert?

Sollte für den Anfang genügen:

http://olli.informatik.uni-oldenburg.de/Deadlock/Html/lernkonzept.html

Aber wieso interessiert dich das?

von meitrixs (Gast)


Lesenswert?

Danke für den link, scheint so als würde es meine Fragen beantworten. 
Werd mich aber ein ander mal mit dem Text vergnügen.
Dieselbe Frage wurde mir mal bei einem Vorstellungsgespräch gestellt. 
Konnte darauf nur antworten das bei einem Deadlock ein wartender Thread 
auf ein Ereignis wartet. Dieses Ereignis aber aufgrund eines ungültigen 
Zustandes nie auftritt, und das die Programmausführung an dieser Stelle 
hängenbleibt. Aber    wie es zu so einer Situation kommt, ist mir immer 
noch nicht ganz klar.
Aussderdem könnte so ein Deadlock doch auch bei der hardwarenahen 
Programmierung ein Problem sein. Da man hier ja auch mit "parallen" 
Prozessen arbeite muss (Interupts).

von Rolf Magnus (Gast)


Lesenswert?

Nehmen wir an, ein Thread muß, um seine Arbeit zu verrichten, zwei 
Ressourcen A und B belegen. Ein zweiter Thread muß dies ebenfalls.

Der Ablauf bei einem Deadlock könnte z.B. so aussehen:

 Thread 1 belegt Ressource A (z.B. Mutex-Lock)
 -> Scheduler unterbricht und führt Thread 2 aus
 Thread 2 belegt Ressource B
 Thread 2 will A belegen, ist aber schon belegt -> Block
 -> Scheduler übergibt wieder an Thread 1
 Thread 1 will Ressource A belegen, ist aber schon belegt -> Block

Wenn keiner der Threads seine Ressource freigibt, bleiben beide für 
immer stehen. Das ist ein Deadlock.

von Olaf S. (olaf2001)


Lesenswert?

Rolf Magnus wrote:
>  Thread 1 will Ressource A belegen, ist aber schon belegt -> Block
>
Besser ist: Thread 1 will Ressource B belegen (A hat er ja schon), ist 
aber schon belegt -> Block

Ein Thread wartet auf einen anderen, der wiederum auf den ersten Thread 
wartet. Es muß sich dabei nicht unbedingt um Ressourcen handeln, auch 
die Thread-Terminierung eignet sich ausgezeichnet für solcherlei Unbill.

von Rolf Magnus (Gast)


Lesenswert?

> Besser ist: Thread 1 will Ressource B belegen (A hat er ja schon),

Ups, natürlich. War ein Leichtsinnsfehler.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.