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

Lösung in FORTRAN

Das FORTRAN Programm  ist wie folgt. Wie im C++ und im Modula-2 Programm werden die Variablen u, v, w, x global deklariert, das bedeutet, daß sie in einem common-Block abgelegt werden. Die Statements x = u + v + w, u = 3, v = 4 und w = 5 werden in den (externen) Funktionen if1, if2, if3, if4 abgearbeitet (siehe weiter unten). Die default-Attribute für die Pthreads werden aus dem externen common-Block pthread_defaults genommen. Im Hauptprogramm werden die Pthread Variablen it1, it2, it3, it4 als Integer deklariert. In einer do-Loop wird dann 10 mal mit pthread_create die Ausführung der 4 Funktionen angestoßen und mit pthread_join auf die Beendigung der 4 Funktionen gewartet. Anschließend werden dann die Werte der Varaiblen mit print* angezeigt.

      program ppauf3
      integer i1, i2, i3, i4, istat, i, it1, it2, it3, it4, 
     X        ij, iad, imd, icd, ibd, u, v, w, x
      common /data/ u, v, w, x
      common /pthread_defaults/iad, imd, icd, ibd
      external if1, if2, if3, if4
      do 10 i=1,10
         u=0
         v=1
         w=2

         call pthread_create(it1,iad,if1,i1,istat)
         if (istat .ne. 0) print*, 'istat= ',istat  
         call pthread_create(it2,iad,if2,i2,istat)
         if (istat .ne. 0) print*, 'istat= ',istat  
         call pthread_create(it3,iad,if3,i3,istat)
         if (istat .ne. 0) print*, 'istat= ',istat  
         call pthread_create(it4,iad,if4,i4,istat)
         if (istat .ne. 0) print*, 'istat= ',istat  

         call pthread_join(it1,ij,istat)
         if (istat .ne. 0) print*, 'istat= ',istat  
         call pthread_join(it2,ij,istat)
         if (istat .ne. 0) print*, 'istat= ',istat  
         call pthread_join(it3,ij,istat)
         if (istat .ne. 0) print*, 'istat= ',istat  
         call pthread_join(it4,ij,istat)
         if (istat .ne. 0) print*, 'istat= ',istat  

         print*, 'u = ',u, 'v = ',v, 'w = ',w, 'x = ',x 
 10   continue
      end

Die Statement-Funktionen werden hier als externe Funktionen deklariert und sind z.B. in der Datei ppauf3sub.f enthalten.

      integer function if1(iarg)
      integer iarg, u, v, w, x
      common /data/u, v, w, x
      x=u+v+w
      return
      end

      integer function if2(iarg)
      integer iarg, u, v, w, x
      common /data/u, v, w, x
      u=3
      return
      end

      integer function if3(iarg)
      integer iarg, u, v, w, x
      common /data/u, v, w, x
      v=4
      return
      end

      integer function if4(iarg)
      integer iarg, u, v, w, x
      common /data/u, v, w, x
      w=5
      return
      end

Das Programm wird mit

       f77 -u -para -o a3 ppauf3.f ppauf3sub.f
compiliert und mit
             >a3
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 = 12, in der zweiten Zeile, zeigt, daß zu erst die Zuweisungen an u, v und w ausgeführt wurden und dann die Summe u + v + w berechnet wurde. Die Ausgabe x = 6, in der dritten Zeile, zeigt, daß zu erst die Zuweisung an u ausgeführt wurde und dann die Summe u + v + w berechnet wurde. Anschließed wurden die Zuweisungen an v und w ausgeführt.

           u =   3 v =   4 w =   5 x =   3 
           u =   3 v =   4 w =   5 x =   12 
           u =   3 v =   4 w =   5 x =   6 
           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 =   3 
           u =   3 v =   4 w =   5 x =   3 
           u =   3 v =   4 w =   5 x =   3 
           u =   3 v =   4 w =   5 x =   3

Damit ist die Besprechung der Lösungen der Aufgabe in den Programmiersprachen C++, Modula-2 und FORTRAN beendet. Im Folgenden werden wir nur wieder eine Sprache verwenden.



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