\begin{frame} \frametitle{Deadlocks} \begin{alertblock}{} Like many lock-based protocols, 2PL has the risk of \emph{deadlocks}. \end{alertblock} \pause \begin{exampleblock}{A Deadlock Situation} \begin{tcenter} \begin{tabular}{|l|l|} \hline \emph{Transaction 1} & \emph{Transaction 2} \\ \hline & \\ \mpause[1]{ \textcolor{dgreen}{$\fun{xlock}(\var{A})$} } & \\ \mpause[1]{ \vdots} & \mpause[2]{ \textcolor{dgreen}{$\fun{xlock}(\var{B})$} }\\ \mpause[1]{ do something } & \mpause[2]{ \vdots } \\ \mpause[1]{ \vdots } & \mpause[2]{ do something } \\ \mpause[3]{ \textcolor{gray}{$\fun{lock}(\var{B})$} } & \mpause[2]{ \vdots } \\ \mpause[4]{ \alert{(waiting for $T_2$ to unlock B)} } & \mpause[5]{ \textcolor{gray}{$\fun{lock}(\var{A})$} } \\ & \mpause[6]{ \alert{(waiting for $T_1$ to unlock A)} } \\ \hline \end{tabular} \end{tcenter} \end{exampleblock} \pause\pause\pause\pause\pause\pause\pause \begin{alertblock}{} Both transactions would wait for each other \emph{indefinitely}.\\ \emph{We need to detect deadlocks!} \end{alertblock} \end{frame}