\documentclass{bschlangaul-aufgabe}

\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe},
  Thematik = {PKW},
  Referenz = DB.Transaktionsverwaltung.PKW,
  RelativerPfad = Module/10_DB/60_Transaktionsverwaltung/Aufgabe_PKW.tex,
  ZitatSchluessel = db:ab:6,
  ZitatBeschreibung = {Aufgabe 6},
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Transaktionen, Deadlock},
}

\begin{enumerate}

%%
% (a)
%%

\item Gegeben ist folgende Situation (die nichts mit einer Datenbank zu
tun hat!): Vier PKWs kommen gleichzeitig an eine Kreuzung, an der die
Rechts-vor-Links-Vorfahrtsregelung gilt. Welches Problem tritt hier auf?
\index{Transaktionen}
\footcite[Aufgabe 6]{db:ab:6}

\begin{bAntwort}
Es tritt eine sogenannte Deadlock-Situation\index{Deadlock} auf. Rein
theoretisch müsste der Verkehr zum Erliegen kommen, denn jedes Auto
müsste einem anderen Auto die Vorfahrt gewähren. Jedes KFZ ist mit einem
Verkehrsteilnehmer konfrontiert, der von rechts kommt.
\end{bAntwort}

%%
% (b)
%%

\item Gegeben sind die Transaktionen $T_1$ und $T_2$.

\begin{center}
\begin{tabular}{|l|}
\hline
$T_1$ \\\hline
BOT \\\hline
$\dots$ \\\hline
SELECT F1 FROM TAB \\\hline
$\dots$ \\\hline
SELECT F2 FROM TAB \\\hline
$\dots$ \\\hline
COMMIT WORK \\\hline
\end{tabular}
%
\begin{tabular}{|l|}
\hline
$T_2$ \\\hline
BOT \\\hline
$\dots$ \\\hline
SELECT F2 FROM TAB \\\hline
$\dots$ \\\hline
SELECT F1 FROM TAB \\\hline
$\dots$ \\\hline
COMMIT WORK \\\hline
\end{tabular}
%
\begin{tabular}{|l|l|}
\hline
\multicolumn{2}{|c|}{TAB} \\\hline
F1 & F2 \\\hline
2 & 3 \\\hline
\end{tabular}
\end{center}

Geben Sie eine quasiparallele Verarbeitung von $T_1$ und $T_2$ an, bei
der es zum „gleichen“ Problem wie in Aufgabe a) kommt.

Hinweis: Wir nehmen an, dass eine Spalte F der Tabelle TAB durch
\texttt{rlock(F)} bzw. \texttt{xlock(F)} gesperrt werden kann.

\begin{bAntwort}
In der 8. Zeile entsteht ein Deadlock, da von verschiedenen
Transaktionen \texttt{rlocks} auf \texttt{F2} gesetzt wurden. Jetzt will
\texttt{$T_1$} auf \texttt{F2} einen \texttt{xlock} setzten, was nicht
möglich ist, weil der \texttt{rlock} von \texttt{$T_2$} noch nicht frei
gegeben wurde.

\begin{tabular}{|l|l|l|l}
   & $T_1$                  & $T_2$              &          \\
1  & BOT                    &                    &          \\
2  &                        & BOT                &          \\
3  & rlock(F1)              &                    &          \\
4  &                        & rlock(F2)          &          \\
5  & SELECT F1 FROM TAB     &                    &          \\
6  & rlock(F2)              &                    &          \\
7  & SELECT F2 FROM TAB     &                    &          \\
8  & xlock(F2)              &                    & $\leftarrow$ Deadlock \\
9  &                        & SELECT F2 FROM TAB &          \\
10 & UPDATE TAB SET F2 = F1 &                    &          \\
\end{tabular}
\end{bAntwort}
\end{enumerate}

\end{document}
