<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Maekawa-Algorithmus</id>
	<title>Maekawa-Algorithmus - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Maekawa-Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Maekawa-Algorithmus&amp;action=history"/>
	<updated>2026-06-03T05:45:00Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Maekawa-Algorithmus&amp;diff=1432786&amp;oldid=prev</id>
		<title>imported&gt;Prüm: /* Literatur */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Maekawa-Algorithmus&amp;diff=1432786&amp;oldid=prev"/>
		<updated>2021-05-09T16:11:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Literatur&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der von [[Mamoru Maekawa]] 1985 vorgestellte &amp;#039;&amp;#039;&amp;#039;Maekawa-Algorithmus&amp;#039;&amp;#039;&amp;#039; kommt in einem [[Verteiltes System|verteilten System]] zur Anwendung, um den Zugang zu einem [[Kritischer Abschnitt|kritischen Abschnitt]] zu regeln und dabei [[Mutex|wechselseitigen Ausschluss]] zu garantieren. Die Grundidee dieses Algorithmus ist es, nicht alle Prozesse zu fragen (wie zum Beispiel der [[Ricart-Agrawala-Algorithmus]]), sondern nur eine Teilmenge.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus garantiert die Safety-Eigenschaft (nur ein einziger Prozess befindet sich im kritischen Abschnitt, kann aber ohne Verwendung von Vektorzeitstempeln zu [[Deadlock (Informatik)|Deadlocks]] führen (verletzt die Lifeness-Eigenschaft)).&lt;br /&gt;
&lt;br /&gt;
Dabei benutzt man Voting Sets, &amp;lt;math&amp;gt;V_i&amp;lt;/math&amp;gt;. Jeder Prozess &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt; hat ein Voting Set (&amp;lt;math&amp;gt;P_i \in V_i&amp;lt;/math&amp;gt;) und liegt in mindestens 2 Voting Sets. In jedem Voting Set befinden sich K Prozesse (&amp;lt;math&amp;gt;\forall i \left|V_i\right| = K&amp;lt;/math&amp;gt;), und zwei verschiedene Voting Sets haben mindestens ein gemeinsames Element (&amp;lt;math&amp;gt;\forall i \forall j [V_i \bigcap V_j \ne \empty ]&amp;lt;/math&amp;gt;)&lt;br /&gt;
Als Annäherung für das Optimum (möglichst kleines K) wird &amp;lt;math&amp;gt;K = 2\sqrt{N}-1&amp;lt;/math&amp;gt; benutzt. Man ordnet die Prozesse in einer &amp;lt;math&amp;gt;\sqrt{N}\times \sqrt{N}&amp;lt;/math&amp;gt; Matrix an und definiert das Voting Set &amp;lt;math&amp;gt;V_i&amp;lt;/math&amp;gt; als alle Prozesse die in der gleichen Spalte oder Zeile liegen wie &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Algorithmus ==&lt;br /&gt;
Jeder Prozess hat einen internen Status STATE mit den Werten RELEASED (Startwert), WANTED (der Prozess möchte den kritischen Abschnitt betreten), HELD (der Prozess befindet sich im kritischen Abschnitt) und eine boolesche Variable VOTED (einem anderen Prozess wurde die Erlaubnis erteilt, den kritischen Abschnitt zu betreten).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hat ein Prozess den Wunsch, den kritischen Abschnitt zu betreten:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* setze STATE=WANTED&lt;br /&gt;
* Anfrage (Request) an alle Prozesse im Voting Set&lt;br /&gt;
* warte bis K Antworten erhalten&lt;br /&gt;
* setze STATE=HELD und betrete den kritischen Abschnitt&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beim Verlassen:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* setze STATE=RELEASED&lt;br /&gt;
* Freigabe (Release) an alle Prozesse im Voting Set&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beim Empfang einer Anfrage:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Wenn STATE=HELD oder VOTED=TRUE dann&lt;br /&gt;
** Anfrage in Warteschlange einsortieren&lt;br /&gt;
* sonst&lt;br /&gt;
** Antworte&lt;br /&gt;
** setze VOTED=TRUE&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beim Empfang einer Freigabe:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Ist die Warteschlange leer&lt;br /&gt;
** setze VOTED=FALSE&lt;br /&gt;
* sonst&lt;br /&gt;
** Sende Antwort an den ersten Prozess in der Warteschlange (und entferne ihn daraus)&lt;br /&gt;
** setze VOTED=TRUE&lt;br /&gt;
&lt;br /&gt;
== Nachrichtenkomplexität ==&lt;br /&gt;
&lt;br /&gt;
Mit jedem Prozess in &amp;lt;math&amp;gt;V_i&amp;lt;/math&amp;gt; werden drei Nachrichten ausgetauscht:&lt;br /&gt;
&lt;br /&gt;
* eine Anfrage&lt;br /&gt;
* eine Einwilligung&lt;br /&gt;
* eine Freigabe&lt;br /&gt;
&lt;br /&gt;
Insgesamt werden somit &amp;lt;math&amp;gt;3\left|V_i\right| = 3(2\sqrt{N}-1)&amp;lt;/math&amp;gt; Nachrichten benötigt. &lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
&lt;br /&gt;
* Mamoru Maekawa: &amp;#039;&amp;#039;A &amp;lt;math&amp;gt;\sqrt{n}&amp;lt;/math&amp;gt; Algorithm for Mutual Exclusion in Decentralized Systems&amp;#039;&amp;#039;. in: [[Association for Computing Machinery|ACM]] Transactions on Computer Systems, 1985&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Algorithmus]]&lt;br /&gt;
[[Kategorie:Verteiltes Rechnen]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Prüm</name></author>
	</entry>
</feed>