www.mikrocontroller.net

Forum: PC-Programmierung Thread und Deadlock


Autor: meitrixs (Gast)
Datum:

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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte für den Anfang genügen:

http://olli.informatik.uni-oldenburg.de/Deadlock/H...

Aber wieso interessiert dich das?

Autor: meitrixs (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olaf Stieleke (olaf2001)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

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

Ups, natürlich. War ein Leichtsinnsfehler.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.