{"id":63959,"date":"2024-12-22T09:42:26","date_gmt":"2024-12-22T08:42:26","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=63959"},"modified":"2024-12-22T09:43:06","modified_gmt":"2024-12-22T08:43:06","slug":"threads-iv-deadlock","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2024\/12\/threads-iv-deadlock.htm","title":{"rendered":"Threads IV &#8211; Deadlock"},"content":{"rendered":"\n<p>(<a href=\"https:\/\/www.herr-rau.de\/wordpress\/2015\/12\/threads-iii-erzeuger-verbraucher-und-ein-neuer-zustand.htm\">Fortsetzung von hier.<\/a>) Jetzt sind meine drei immer noch sch\u00f6nen Blogeintr\u00e4ge zu Threads auch schon 9 Jahre her. Mir fiel vor ein paar Tagen auf, dass inhaltlich noch ein Rest fehlt, n\u00e4mlich die zyklische Verklemmung, a.k.a Deadlock, das hole ich hier nach; ohne die anderen Eintr\u00e4ge dazu sieht dieser vielleicht etwas zusammenhanglos aus.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Grunds\u00e4tzliches<\/h2>\n\n\n\n<p>In den vorherigen Beittr\u00e4gen ging es darum, was Threads sind und warum sie n\u00fctzlich sein k\u00f6nnen, was es f\u00fcr ein Problem geben kann und welche L\u00f6sung es gibt, was es dann aber auch noch als Problem geben kann und was die L\u00f6sung f\u00fcr dieses weitere Problem ist. Fehlt noch das dritte Problem, f\u00fcr das es keine allgemeine technische L\u00f6sung gibt: das zyklische Warten, auch Verklemmung, auch Deadlock genannt. Dabei warten mehrere Threads jeweils aufeinander und k\u00f6nnen nicht weiter machen. Das kann dann geschehen, wenn:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>es mehr als eine Ressource gibt,<\/li>\n\n\n\n<li>die Ressourcen nicht gleichzeitig, sondern nur exklusiv benutzt werden k\u00f6nnen,<\/li>\n\n\n\n<li>die Threads zum Arbeiten mehr als eine Ressource ben\u00f6tigen,<\/li>\n\n\n\n<li>sich diese Ressourcen nacheinander in beliebiger Reihenfolge holen,<\/li>\n\n\n\n<li>und nicht wieder hergeben, auch wenn sie noch auf ihre fehlende Ressourcen warten.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Das Philosophenproblem<\/h2>\n\n\n\n<p>Das Standardbeispiel ist das Philosophenproblem. Man hat einen runden Tisch mit n Tellern, f\u00fcr jeden Gast einen. St\u00fchle und eine Tischdecke wird es auch noch geben, aber die sind f\u00fcr das Modell nicht wichtig. Wichtig sind aber die Gabeln: zwischen jeweils zwei Tellern liegt immer 1 Gabel. Wenn es also n Teller gibt, gibt es auch n Gabeln, eine links und eine rechts von jedem Teller.<\/p>\n\n\n\n<p>Zum Essen braucht man in diesem Modell immer 2 Gabeln. Man nimmt zuerst entweder die Gabel links vom eigenen Teller oder die Gabel rechts vom eigenen Teller und ists, sobald man beide Gabeln hat. Wenn man fertig ist, legt man die Gabeln zur\u00fcck. Das ist wichtig, weil der Nebenphilosoph vielleicht darauf wartet, dass die &#8211; ja gemeinsam benutzte &#8211; Gabel endlich frei wird.<\/p>\n\n\n\n<p>Dieses komische Verfahren kann manchmal gut gehen. Aber es kann auch vorkommen, dass alle Philosophen gleichzeitig ihre linke Gabel ergreifen und dann alle darauf warten, dass einmal ihre rechte Gabel frei wird &#8211; was nicht geschehen wird, da alle Gabeln in linken H\u00e4nden sind.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"726\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/thread_philosophen-700x726.png\" alt=\"\" class=\"wp-image-63963\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/thread_philosophen-700x726.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/thread_philosophen-289x300.png 289w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/thread_philosophen-145x150.png 145w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/thread_philosophen.png 1130w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size\">Benjamin D. Esham \/ Wikimedia Commons, <a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:An_illustration_of_the_dining_philosophers_problem.png\" target=\"_blank\" rel=\"noreferrer noopener\">An illustration of the dining philosophers problem<\/a>, <a href=\"https:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/legalcode\" target=\"_blank\" rel=\"noreferrer noopener\">CC BY-SA 3.0<\/a><\/p>\n\n\n\n<p>Wenn Plato, Konfuzius, Sokrates, Voltaire und Frans Hals jeweils ihre linke Gabel nehmen, ist keine rechte mehr frei. (Frauen fehlen.) Hier als Film:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"768\" style=\"aspect-ratio: 1024 \/ 768;\" width=\"1024\" controls src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/threads_philosophen_kurz.mp4\"><\/video><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Vermeiden oder Aufl\u00f6sen<\/h2>\n\n\n\n<p>Verklemmungen kann man aufl\u00f6sen oder vermeiden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>jeder Philosoph muss beide gew\u00fcnschte Gabeln <em>gleichzeitig <\/em>nehmen (gleichzeitiges Reservieren aller ben\u00f6tigten Ressourcen)<\/li>\n\n\n\n<li>jeder Philosoph hat die M\u00f6glichkeit, aufzugeben und reservierte Gabeln auch mal wiede auf den Tisch zur\u00fcck zu legen (freiwilliges Aufgeben von Ressourcen)<\/li>\n\n\n\n<li>jemand von au\u00dfen kann kommen und einem Philosophen eine Gabel wegnehmen und auf den Tisch legen (zwangsweise Zur\u00fcckgeben von nicht verwendeten Ressourcen)<\/li>\n\n\n\n<li>die Gabel mit der kleinsten Nummer muss zuerst genommen werden (das ist f\u00fcr einen der Philosophen n\u00e4mlich die rechte, f\u00fcr die anderen die linke, zum Beispiel), bevor man an die andere darf (feste Reihenfolge der Ressourcen)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Kein gutes Beispiel<\/h2>\n\n\n\n<p>Als Beispiel f\u00fcr eine Verklemmung wird auch oft eine Kreuzung genannt, mit rechts vor links und vier Autos, die zyklisch aufeinander warten. Steht so bei Wikipedia deutsch, und \u00e4hnlich bei Wikipedia englisch, stimmt aber trotzdem oft nicht, habe eben kommentiert dort, werde berichten. (&#8222;Diskussion&#8220; hei\u00dft der Bereich auf Deutsch, &#8222;Talk&#8220; auf Englisch.) <\/p>\n\n\n\n<p>Denn: Wenn die Kreuzung 1 Ressource ist, kann es gar keine Verklemmung geben, es k\u00f6nnte jederzeit ein Auto fahren. Zur Verklemmung geh\u00f6ren immer mindestens 2 Ressourcen. Damit also eine Verklemmung entstehen kann, muss man das Kreuzungsinnere als 4 Quadranten betrachten, also 4 Ressourcen, von denen jedes Auto die 2 vor ihm liegenden zum Durchfahren braucht. Wenn jedes Auto den Quadranten vor sich reserviert, also zum Beispiel hineinf\u00e4hrt, dann haben wir eine Verklemmung, verkehrstechnisch: gridlock.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"875\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/Threads_New_York_City_Gridlock-700x875.jpg\" alt=\"\" class=\"wp-image-63968\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/Threads_New_York_City_Gridlock-700x875.jpg 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/Threads_New_York_City_Gridlock-240x300.jpg 240w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/Threads_New_York_City_Gridlock-120x150.jpg 120w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/Threads_New_York_City_Gridlock.jpg 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/User:Rgoogin\">Rgoogin<\/a> at the <a href=\"https:\/\/en.wikipedia.org\/wiki\/\">English Wikipedia<\/a>, <a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:New_York_City_Gridlock.jpg\" target=\"_blank\" rel=\"noreferrer noopener\">New York City Gridlock<\/a>, <a href=\"https:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/legalcode\" target=\"_blank\" rel=\"noreferrer noopener\">CC BY-SA 3.0<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Fortsetzung von hier.) Jetzt sind meine drei immer noch sch\u00f6nen Blogeintr\u00e4ge zu Threads auch schon 9 Jahre her. Mir fiel vor ein paar Tagen auf, dass inhaltlich noch ein Rest fehlt, n\u00e4mlich die zyklische Verklemmung, a.k.a Deadlock, das hole ich hier nach; ohne die anderen Eintr\u00e4ge dazu sieht dieser vielleicht etwas zusammenhanglos aus. Grunds\u00e4tzliches In [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":63968,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227],"class_list":["post-63959","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/Threads_New_York_City_Gridlock.jpg","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/63959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=63959"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/63959\/revisions"}],"predecessor-version":[{"id":63973,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/63959\/revisions\/63973"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/63968"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=63959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=63959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=63959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}