Thread und Deadlock

Gast #545552
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).
Gast #545581
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.
#546006
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren