Nebenläufige Programme


\begin{frame}[fragile,environment=slide]
\frametitle{Einleitung}
\par
Sebesta: C...
...ozessoren)
\item logische NL (mehrere virtuelle P.)
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Nebenläufige Unterprogramme...
...he Beispiel)
\item
mit Synchronisation: \dots
\par
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Shop-Simulation}
\par
Ein A...
...}\end{verbatim}
jedes Brötchen soll genau einmal verkauft werden
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Shop-Simulation (II)}
\begi...
...= (int) Math.random () * 1000;
Thread.sleep(d);
}\end{verbatim}
\par\end{frame}

\begin{frame}[fragile,environment=slide]
\frametitle{Ziele der Synchronisation}
...
...munikation (cooperation synch.)
\par
Datentransport
\end{itemize}\par\end{frame}

\begin{frame}[fragile,environment=slide]
\frametitle{Synchronisation durch Semap...
... dann eine Task aus Queue entfernen
und aktivieren
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Semaphore (II)}
\par
\begin...
...eine synchronized Methode eines Objektes ausführen.
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Fünf Philosophen}
\par
ein ...
...losophen)
sinnvoll zugeteilt werden,
\emph{so daß keiner verhungert}.\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Gefahr 1: Deadlock (Verklem...
...wenigstens eine Ressource,
auf die ein andere wartet)
\end{itemize}\end{frame}

\begin{frame}[fragile,environment=slide]
\frametitle{Gefahr 2: Unfairness (Verhu...
...t.
\par
(\dots weil ihm die anderen abwechselnd alles wegnehmen)
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Deadlock?}
\par
Dieser Ansa...
...ft.drop (this);
} } }\end{verbatim}
Wie kann man das verhindern?
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Eine Gabel (im Prinzip)}
\p...
... { .. }
synchronized void take (Philo p) { .. }
}\end{verbatim}
\par\end{frame}

\begin{frame}[fragile,environment=slide]
\frametitle{Ein Philosoph (im Prinzip)}...
... (this);
right.drop (this); left.drop (this);
}
}
}\end{verbatim}\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Das Hauptprogramm}
\begin{v...
... fo[(i+1) % size]);
new Thread (ph[i]).start ();
} } }\end{verbatim}\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Eine Gabel (genauer)}
\par
...
... p) {
while (taken) {
wait ();
}
taken = true;
}
}\end{verbatim}\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Eine Gabel (wait/notify)}
\...
...endein}
Thread aus der Warteschlange ausgewählt und fortgesetzt.
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Synchrone Kommunikation (Re...
...A.Foo (4); A.Bar (B); A.Foo (5); A.Bar (B);
end B;\end{verbatim}
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Rendezvous (II)}
\par
\begi...
...ffensichtlich
\item
Server sollte zustandslos sein
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Datentransport durch Kanäle...
...m
mehrere producer können Kanal nach Bedarf nutzen
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Kanäle (Beispiel)}
\par
\be...
...pugs.blogs.com/pugs/2006/10/smp_paralleliza.html\vert
\end{small}\par\end{frame}



Johannes Waldmann 2007-01-23