Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » pfp » Aufgabe 1 (Wissensfragen)   (Übersicht)

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
pruefungen:bachelor:pfp:loesungws12 [22.07.2016 17:31] – Code-Formatierung u.a. Marcel[Inf]pruefungen:bachelor:pfp:loesungws12 [01.08.2017 19:45] (aktuell) ab21ajus
Zeile 74: Zeile 74:
 } }
 </code> </code>
 +
 +==== Aufgabe 4 (Schreibtischlauf - Barrieren) ====
 +
 +  * a) a = 1, weil sowohl a++ als auch die System.out.println-Ausgabe in einem synchronized-Block stehen und beide Threads auf dieselbe Marke synchronisieren.
 +  * b) Mögliche Ausgaben sind:
 +
 +<code>
 +a=1
 +a=2
 +a=3
 +Threads 1, 2, 3 started.
 +</code>
 +
 +Und
 +
 +<code>
 +a=1
 +a=2
 +Threads 1, 2, 3 started.
 +a=3
 +</code>
 +
 +Der Main-Thread synchronisiert nicht auf irgendeine Marke (insb. nicht auf BarrierTest.class), daher erscheinen ihm die synchronized-Blöcke der Threads nicht als unteilbare Einheit und er kann bereits nach a++, aber vor System.out.println die While-Schleife verlassen.
 +
 +  * c) 1, 2, 3, oder 4 Mal. Jeder Thread könnte gleichzeitig b=0 am Anfang feststellen oder erst prüfen, nachdem die anderen Threads (oder ein Teil davon) das IF verlassen.
 +  * d) Vorletzte oder letzte Zeile. Der CountDownLatch ist nur mit 3 initialisiert worden. Daher kann sich der letzte Thread irgendwo zwischen barrier.await() und latch.countDown() befinden.
  
  
Zeile 107: Zeile 133:
   helper(m,0)   helper(m,0)
 } }
-   + 
 +//Alternative ohne Helfer-Funktion: 
 +  def sortRows2: Matrix => Matrix = m => m match { 
 +    case Nil => Nil 
 +    case (row::m)  => if (m.length % 2 == 0) 
 +                          sortAsc(row)::sortRows2(m) 
 +                     else  
 +                          sortDes(row)::sortRows2(m) 
 +  } 
 + 
 def sortHelper: (Int, Matrix) => Stream[(Matrix,Matrix)] = {  def sortHelper: (Int, Matrix) => Stream[(Matrix,Matrix)] = { 
   case (n,m) =>  if (n%2==0) (m, sortRows(m)) #::sortHelper(n+1,sortRows(m)) else (m,sortCols(m)) #::sortHelper(n+1,sortCols(m))        case (n,m) =>  if (n%2==0) (m, sortRows(m)) #::sortHelper(n+1,sortRows(m)) else (m,sortCols(m)) #::sortHelper(n+1,sortCols(m))