Kann mir jemand erklären was ein Deadlock ist, wie er entsteht, und wie man ihn vermeiden kann?
Sollte für den Anfang genügen: http://olli.informatik.uni-oldenburg.de/Deadlock/Html/lernkonzept.html Aber wieso interessiert dich das?
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).
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.
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.
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.