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

Dies ist eine alte Version des Dokuments!


Lösungsvorschlag

Aufgabe 1 (Wissensfragen)

a)

  • Bei 3 Arbeitspaketen wird ein Speedup von 1.8 gemessen.
s(n) = 54 s und p(n) = 2 * 6 + 18 s = 30 s ⇒ Sp(n) = 54 / 30

b)

  • Das Schalten von Transitionen ist atomar.
  • Keine Belegung des Petri-Netzes ist im Erreichbarkeitsgraph doppelt vorhanden.

c)

  • def g: ((Int, Int) ⇒ Int) ⇒ Int
  • (def g: ((Int, Int) ⇒ Int) ⇒ Int)

Aufgabe 2 (Longest Common Subsequence)

Not verified yet!
public char[] lcs() throws Exception {
	for (int i = 0; i < threads; i++) { // Anfang der for-Schleife #1
		final int threadId = i;
		queues[threadId] = new LinkedBlockingQueue<Object>();
		int step = (columns - 1) / threads;
		final int start = 1 + i * step;
		final int end = (i == threads - 1) ? columns - 1 : start + step;
 
		Thread t = new Thread() { public void run() { try {
			for (int row = 1; row < rows; row++) {
				if (threadId > 0) {
					queues[threadId - 1].take();
				}
				for (int c = start; c < end; c++) { // fuelle Zeile des Blocks
					table[row][c] = calcValue(row, c);
				}
				queues[threadId].put(READY);
			}
		} catch (InterruptedException e) {}}};
		t.start();
	} // Ende der for-Schleife #1
	for (int i = 1; i < rows; ++i) {
		queues[threads - 1].take();
	}
	return readMatrix();
}

Aufgabe 3 (Fehlersuche)

a) Stichwortartige Problembeschreibung:
Klasse Error1 hat eigene Kopie von finished im Cache und bekommt möglicherweise die globale Änderung nicht mit.

Beheben Sie den Fehler:

static volatile boolean finished = false;

b) Stichwortartige Problembeschreibung:
Da if-Abfrage nicht synchronisiert, wird latch möglicherweise zweimal dekrementiert und Haupt-Thread schläft ewig.

Beheben Sie den Fehler:

synchronized(Error2.class) { /* if-Abfrage */ }

c) Stichwortartige Problembeschreibung:
In foo() wird run-Methode direkt aufgerufen!

Beheben Sie den Fehler (Zeile 15):

thread2.start();