From 3cd8ca1d0d3f812101aa278048c269c756e738b0 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Sun, 10 Apr 2022 18:37:33 +0200 Subject: [PATCH] init - Synchronisation in Doku --- .gitignore | 3 +++ README.md | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) 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. + + + +