next up previous contents index
Next: Lösung in Modula-2 Up: 3.3 Erzeugung und Beendigung Previous: 3.3 Erzeugung und Beendigung

Lösung in C++

Das C++ Programm  ist wie folgt. Die Variablen u, v, w, x werden global deklariert. Die Statements x := u + v + w, u := 3, v := 4 und w := 5 werden in den Funktionen P1, P2, P3, P4 abgearbeitet. Im Hauptprogramm main werden dann die Pthread Variablen deklariert pthread_t t1, t2, t3, t4; und mit pthread_create wird dann die Ausführung der 4 Funktionen angestoßen. Anschliessend wird mit pthread_join auf die Beendigung der 4 Funktionen gewartet und danach werden die Werte der Variablen mit cout angezeigt.

          #include <iostream.h>
          #include <pthread.h>
          
          int x, u, v, w; 
          
          void *P1 (void * arg)
          {
             x = u + v + w; 
             return arg;
          }
          
          void *P2 (void * arg)
          {
             u = 3; 
             return arg;
          }
          
          void *P3 (void * arg)
          {
             v = 4;
             return arg;
          }
          
          void *P4 (void * arg)
          {
             w = 5; 
             return arg;
          }
          
          int main()
          {
              pthread_t t1, t2, t3, t4;
              long int i1, i2, i3, i4;
              void *o1, *o2, *o3, *o4;
          
              i1 = 1; i2 = 2; i3 = 3; i4 =4;
              int i = 0; int e;  
          
              while (i < 10) { i++;
                    u = 0; v = 1; w = 2;    
          
                    e = pthread_create(&t1, pthread_attr_default, P1, &i1); 
                    e = pthread_create(&t2, pthread_attr_default, P2, &i2); 
                    e = pthread_create(&t3, pthread_attr_default, P3, &i3); 
                    e = pthread_create(&t4, pthread_attr_default, P4, &i4); 
          
                    e = pthread_join(t1, &o1); 
                    e = pthread_join(t2, &o2); 
                    e = pthread_join(t3, &o3); 
                    e = pthread_join(t4, &o4); 
          
                    cout << " u = " << u; 
                    cout << " v = " << v; 
                    cout << " w = " << w;
                    cout << " x = " << x; 
                    cout << "\n";
              };
              return 0;
          }

Das Programm wird mit

             >CC ppauf3.C -o ppauf3 -para
compiliert und mit
             >ppauf3
ausgeführt. Die Ausgabe könnte etwa wie folgt aussehen. Die Ausgabe x = 3, in der ersten Zeile, zeigt, daß die Summe u + v + w vor den Zuweisungen an die Variablen berechnet wurde. Die Ausgabe x = 9, in der zweiten Zeile, zeigt, daß zu erst die Zuweisungen an v und w ausgeführt wurden, dann die Summe u + v + w berechnet wurde und schliesslich die Zuweisung an u ausgeführt wurde. Die Ausgabe x = 12, in der dritten Zeile, zeigt, daß zu erst alle Zuweisungen an u, v und w ausgeführt wurden und dann erst die Summe u + v + w berechnet wurde.

             u = 3 v = 4 w = 5 x = 3
             u = 3 v = 4 w = 5 x = 9
             u = 3 v = 4 w = 5 x = 12
             u = 3 v = 4 w = 5 x = 3
             u = 3 v = 4 w = 5 x = 3
             u = 3 v = 4 w = 5 x = 3
             u = 3 v = 4 w = 5 x = 12
             u = 3 v = 4 w = 5 x = 3
             u = 3 v = 4 w = 5 x = 3
             u = 3 v = 4 w = 5 x = 3



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