[Frage] Multithreading zur Lösung von Deadlocks?

Hi,

ich habe vor kurzem etwas über Multitasking und Multithreading gehört. Dabei kam folgende Situation zur Sprache:

Prozess A hat greift auf Ressource A und will auf Ressource B zugreifen, lässt Resource A aber erst los, wenn er Ressource B hat. Prozess B hat greift auf Ressource B und will auf Ressource A zugreifen, lässt Resource B aber erst los, wenn er Ressource A hat.

Hier entsteht ja ein "lock". Es hieß, dass Multithreading dieses Problem löst. Wie und warum ist mir aber unklar.

Kann mir das jemand genauer erklären?

cu
serow

EDIT: Artikel zu Multithreading bei Wikipedia schon gelesen ;)
 
Ich bin mir nicht sicher, was du jetzt genau wissen willst. XY-Problem?
(Mal übersichtlicher dargestellt)
Wenn Pa Ra sperrt, bis er Rb hat
und Pb Rb sperrt, bis er Ra hat
entsteht doch eine Zwickmühle. Btw. hat man hier doch Multitasking, welches das Problem erst aufwirft?
Man könnte vieleicht, wenn ich dein Anliegen richtig verstanden habe, einen Prozess C anlegen, welcher überprüft, ob ein solcher Interessenskonflikt vorliegt und diesen ggf. löst.
 
Also die gleichzeitige Existenz von 2 Prozessen wäre ja Multitasking. Multithreading erlaubt das Aufteilen eines Prozesses in mehrere Threads.

Nur wie die Möglichkeit Threads zu benutzen diese Zwickmühle löst sehe ich nicht.
 
Bloßes Verwenden von Threads statt Prozessen(falls das gemeint ist) ändert an dem Problem nichts, da sich lediglich organisatorische Details der zugreifenden Vorgänge ändern. Ein paar Lösungsmöglichkeiten findet man stattdessen im Wikipedia-Artikel(Bei den meisten Büchern/Seiten zu Treiber/Kernelprogrammierung findet man auch oft Abschnitte zu dieser Art von Problemen): http://en.wikipedia.org/wiki/Deadlock
 
wie schon oben gesagt löst Multithreading das problem nicht
aber wie auch im Wiki Artikel existieren reichlich Algorithmen um diese zuerkennen/vermeiden/aufzulösen

z.B: mit Prioritäten arbeiten (Priority Inherence / Priority Ceiling)

einen überblick kannst du dir z.B. aus diesem Vorlesungsskript holen (die Quellen sind aber noch deutlich besser)
 
Zurück
Oben