\begin{slide}{Synchronisation durch Semaphore}

(Dijsktra, ca. 1960)

Semaphor enthält
\begin{itemize}\itemsep 2pt
\item
  natürliche Zahl 
\item
  Warteschlange (Queue) für Tasks
\end{itemize}

Operationen
\begin{itemize}\itemsep 2pt
\item
  \emph{wait}: falls Zähler $>0$, dann um eins verringern,\\
  falls Zähler $=0$, dann aufrufende Task in Queue und blockieren
\item
  \emph{release}: falls Queue leer, dann Zähler erhöhen, \\
  falls Queue nicht leer, dann eine Task aus Queue entfernen
  und aktivieren
\end{itemize}

\end{slide}

\begin{slide}{Semaphore (II)}

\begin{itemize}
\item
  Operationen müssen atomar sein, 
  Realisierung ist Aufgabe des Betriebs/Laufzeitsystems
\item
  S. können Aufgabe des gegenseitigen Ausschlusses
  (exklusive Ausführung eines Programmteils) lösen
\item
  sind anfällig gegen Programmierfehler
\item
  werden versteckt als Grundlage besser strukturierter Lösungen benutzt
\item
  Bsp: synchronisierte Methoden in Java

  zu jedem Zeitpunkt darf höchstens ein Thread
  eine synchronized Methode eines Objektes ausführen.
\end{itemize}

\end{slide}


%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 
