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

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
Nächste ÜberarbeitungBeide Seiten, nächste Überarbeitung
pruefungen:bachelor:pfp:loesungws15 [18.07.2016 16:09] – Scala-Aufgaben hinzugefügt! Marcel[Inf]pruefungen:bachelor:pfp:loesungws15 [18.07.2016 16:35] Marcel[Inf]
Zeile 1: Zeile 1:
 ====== Aufgabe 1 ====== ====== Aufgabe 1 ======
-a) 1 und 4+  * a) 1 und 4
  
-b) 2 und 4 (???) (einerseits bessere Lastverteilung, andererseits mehr Overhead / Synchronisationsaufwand)+  * b) 2 und 4 (???) (einerseits bessere Lastverteilung, andererseits mehr Overhead / Synchronisationsaufwand)
  
-c) 2 und 3 (siehe Seite 26 VL Folie: https://www2.cs.fau.de/teaching/SS2016/PFP/slides/secure/pfp-08.pdf )+  * c) 2 und 3 (siehe Seite 26 VL Folie: https://www2.cs.fau.de/teaching/SS2016/PFP/slides/secure/pfp-08.pdf)
  
  
 ====== Aufgabe 2 ====== ====== Aufgabe 2 ======
-a) 
-<code> AtomicInteger activeThreads = new AtomicInteger(0);  
-</code> 
  
-b) +  * a) 
-<code>+<code=java>AtomicInteger curThreads = new AtomicInteger(0);</code> 
 + 
 +  * b) 
 +<code=java>
 boolean manageThreads(String linkUrl) { boolean manageThreads(String linkUrl) {
-if (curThreads.incrementAndget() <= maxThreads) { +  if (curThreads.incrementAndget() <= maxThreads) { 
-    CrawlThread t = new CrawlThread(linkUrl); +      CrawlThread t = new CrawlThread(linkUrl); 
-    t.start(); +      t.start(); 
-} else { +  } 
- curThreads.decrementAndGet(); +  else { 
- return false; +    curThreads.decrementAndGet(); 
-+    return false; 
 +  
 } // END OF manageThreads } // END OF manageThreads
 </code> </code>
  
-c) +  * c) 
-<code>+<code=java>
 public void run() { public void run() {
-process(); +  process(); 
-curThreads.decrementAndGet();+  curThreads.decrementAndGet();
 } }
 </code> </code>
  
-d) +  * d) 
-<code>+<code=java>
 synchronized(visitedUrls) { synchronized(visitedUrls) {
-if(!visitedUrls.contains(linkUrl)){ +  if(!visitedUrls.contains(linkUrl)){ 
- doVisit = true; +    doVisit = true; 
- visitedUrls.add(linkUrl); +    visitedUrls.add(linkUrl); 
- }+  }
 } }
 </code> </code>
  
 +====== Aufgabe 3 ======
 +{{:pruefungen:bachelor:pfp:ws15-16-aufgabe3.png?200|}}
  
-====== Aufgabe 4 ====== +Nicht gefragt, hier aber erwähnt:
-a) +
-3+
  
-Nein ist nicht möglichs wird bereits mit anderen Werten belegt bevor das Programm parallel ausgeführt wird. Die Sichtbarkeit der in Zeile 25 festgelegten Werte ist gewährleistet.+Beschränktheit: Da der Erreichbarkeitsgraph endlich ist, ist das Petri-Netz beschränkt.
  
-b) +Lebendigkeit: Nicht lebendig, da im Zyklus [1, 0, 0, 1], [0, 1, 3, 1] und [0, 2, 0, 1] (rechts im Erreichbarkeitsgraphen) nicht mehr herauskommt und in diesem t1 nicht mehr schaltet.
-3+
  
-Ja, "Geralt" ist eine mögliche Ausgabe. Die Sichtbarkeit der Veränderungen der Threads ist nicht garantiert.+====== Aufgabe 4 ====== 
 +  * a) 3 
 +  Nein ist nicht möglich, s wird bereits mit anderen Werten belegt, bevor das Programm parallel ausgeführt wird. Die Sichtbarkeit der in Zeile 25 festgelegten Werte ist gewährleistet (genauer [nicht VL-Stoff]: Es existiert im Allgemeinen eine Happens-Before Ordnung zwischen Code vor start() und dem Thread-Code.)
  
-c+  * b3 
-4+  Ja, "Geralt" ist eine mögliche Ausgabe. Die Sichtbarkeit der Veränderungen der Threads ist nicht garantiert.
  
-Nein, da die Threads wieder gejoint wurden. Das Programm ist somit nicht mehr parallel. Die Sichtbarkeit ist im (einzigen) Thread gewährleistet.+  * c) 4 
 +  Nein, da die Threads wieder gejoint wurden. Das Programm ist somit nicht mehr parallel. Die Sichtbarkeit ist im (einzigen) Haupt-Thread gewährleistet (genauer [nicht VL-Stoff]: Es existiert im Allgemeinen eine Happens-Before Ordnung zwischen Thread-Code und Code nach .join()). 
 +   
 +Was bringt hier, dass s als volatile deklariert ist? volatile wirkt sich nur auf die Referenz selbst aus, diese wird aber nie geändert, könnte also genauso gut finaln sein.
  
 ====== Aufgabe 5 ====== ====== Aufgabe 5 ======