next up previous contents index
Next: 2.3.1 Interferenz Up: 2 Shared Memory Computer Previous: 2.2.1 Annahmen zum Prozessormodell

2.3 Explizite Synchronisation

Falls explizite Synchronisation  erforderlich ist, kann das await Statement verwendet werden.

Notation:

await B [then tex2html_wrap_inline2058 ; tex2html_wrap_inline2066 ; tex2html_wrap_inline2060 ] end
  Das await Statement ist per Definition ein atomarer Programmteil, das heißt, wir könnten ausführlich schreiben
atomic await B [then tex2html_wrap_inline2058 ; tex2html_wrap_inline2066 ; tex2html_wrap_inline2060 ] end end.

Der Boolesche Ausdruck B bezeichnet die (Verzögerungs-)bedingung, die erfüllt sein muß, bevor die Statements tex2html_wrap_inline2217 ausgeführt werden. Die Ausführung von await muß als atomar verlangt werden, damit in den Variablen, von denen B abhängt, keine Änderungen während der Ausführung der tex2html_wrap_inline2076 sichtbar sind. Insbesondere ist B während der gesammten Ausführung der tex2html_wrap_inline2076 wahr.

Das await Statement ist sehr mächtig, da B ein beliebiger Ausdruck sein kann, der von dem Zustand vieler Prozesse abhängen kann. Das heißt await ist nur sehr aufwendig implementierbar und in der vollen Allgemeinheit nicht effizient. (Eine Implementierung würde Unterstützung des Betriebssystems und des Compilers erfordern.)

Beispiel:

await s > 0 then s:= s - 1 end
atomic if B then s:= s + 1 end end




parallel@rz.uni-mannheim.de
Mon Okt 28 14:38:25 PST 1996