next up previous contents index
Next: 2.2.1 Annahmen zum Prozessormodell Up: 2.2 Atomare Bestandteile und Previous: 2.2 Atomare Bestandteile und

Beispiel: Programmlauf auf der KSR1

Programmlauf in einem Interpreter von obigem Beispiel mit und ohne atomic. In den Beispielen werden jeweils die Variablen x und y um 1 bzw. um 2 incrementiert und die Summe x+y wird der Variablen z zugewiesen.

          VAR x, y, z, i: ANY. BEGIN x:=0; y:=0; z:=0 END. 

          i:=0.
          WHILE i < 50 DO i:=i+1; 
                CON z:=x+y; x:=x+1; y:=y+2 END;  
                CLOUT("x="); IWRITE(x); 
                CLOUT(", y="); IWRITE(y); 
                CLOUT(", z="); IWRITE(z); BLINES(0);  
                END. 
          
          Output:   
          x=1, y=2, z=3
          x=2, y=4, z=3
          x=3, y=6, z=8
          x=4, y=8, z=9
          x=5, y=10, z=12
          x=6, y=12, z=15
          x=7, y=14, z=18
          ...

Ohne atomic treten alle möglichen Werte auf. In der ersten Zeile zeigt z=3, daß sowohl x als auch y incrementiert wurden bevor die Summe x+y gebildet wurde. In der zweiten Zeile zeigt z=3, daß die Summe x+y gebildet wurde bevor x oder y incrementiert wurden. In der dritten Zeile zeigt z=8, daß zuerst y incrementiert wurde, dann die Summe x+y gebildet wurde und danach erst x incrementiert wurde.

          i:=0. 
          WHILE i < 50 DO i:=i+1; 
                BEGIN x:=0; y:=0; z:=0 END; 
                CON ATOMIC z:=x+y END; ATOMIC x:=x+1; y:=y+2 END END;  
                CLOUT("x="); IWRITE(x); 
                CLOUT(", y="); IWRITE(y); 
                CLOUT(", z="); IWRITE(z); BLINES(0);  
                END. 
          
          Output:   
          x=1, y=2, z=0
          x=1, y=2, z=0
          x=1, y=2, z=0
          x=1, y=2, z=0
          x=1, y=2, z=0
          x=1, y=2, z=3
          x=1, y=2, z=0
          x=1, y=2, z=0
          x=1, y=2, z=3
          x=1, y=2, z=0
          ...

Mit atomic treten nur noch zwei mögliche Werte auf. In der ersten bis fünften Zeile zeigt z=0, daß die Summe x+y gebildet wurde bevor x als auch y incrementiert wurden. In der sechsten Zeile zeigt z=3, daß die Summe x+y gebildet wurde nachdem x und y incrementiert wurden.



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