diff --git a/.gitignore b/.gitignore index de2d5e0..cc4680d 100644 --- a/.gitignore +++ b/.gitignore @@ -150,3 +150,6 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ +# +.markdown-preview.html + diff --git a/README.md b/README.md index 0f9b730..1dab367 100644 --- a/README.md +++ b/README.md @@ -34,4 +34,15 @@ schon im richtigen Zustand befindet. ## Zeitliche Synchronisation Um sicherzustellen, dass alle Teilnehmer gleichzeitig den Entwicklungsschritt durchführen und somit der Randaustausch auch -korrekt funktioniert. +korrekt funktioniert, wird eine vereinfachte Version von Lamport Clocks verwendet. +Jeder Prozess hat einen Counter, den er bei jedem Entwicklungsschritt um eins erhöht. +Da für jeden Entwicklungsschritt zuerst die Ränder der benachbarten Teilenehmer abgefragt werden müssen und dies blockieriend geschieht, sind alle Teilnehmer zu jedem Zeitpunkt um maximal 1 bezüglich ihres Counters versetzt. +Damit man jedoch mit seinem Entwicklungsschritt nicht warten muss, bis alle Nachbar den Rand angefragt haben, hält jeder Prozess eine Kopie seine Randes vom vorherigen Zeitpunkt. +Bei der Anfrage nach dem Rand wird der nachgefragte Counter mitgeschickt, dieser muss dem aktuellen oder dem vorherigen Counter entsprechen oder um eins größer sein, als der aktuelle Counter. +Ist der angefragte Counter um eins größer als der aktuelle, liegt also quasi in der Zukunft, wird der Request blockiert, bis der Angefragte den nächsten Entwicklungsschritt durchgeführt hat. +Somit wird das gesamte Game of Life nur so schnell ausgeführt, wie der langsamste Teilenehmer ist. + + + +