134/212
\begin{frame}
  \frametitle{Strict 2 Phase Locking Protocol}

  \begin{goal}{Strict 2 Phase Locking}
    Like in 2 PL, each transaction must get,
    \begin{itemize}
      \item an \emph{S-lock} on an object \emph{before reading} it, and
      \item an \emph{X-lock} on an object \emph{before writing} it.
    \end{itemize}
    \bigskip
    
    \emph{But moreover:}
    \begin{itemize}
      \item 
      A transaction \alert{releases all locks only when the transaction is completed}
      (i.e. when performing commit/rollback).
    \end{itemize}
  \end{goal}
  \smallskip
  \begin{tcenter}
    \begin{tikzpicture}[nodes={black,scale=.8}]
      \draw [thick,->] (0,0) -- node [at end,above] {time} (5cm,0);
      \draw [thick,->] (0,0) -- node [at end,left] {\#of locks held} (0,1.5cm);
      \draw [red,very thick] (0,0) -- node [sloped,above] {lock phase} (2.5cm,1.5cm) -- (4cm,1.5cm) -- (4cm,0cm);
    \end{tikzpicture}
  \end{tcenter}
  \pause
  
  \begin{block}{}
    This protocol is \emph{cascadeless}, avoids cascading aborts.
  \end{block}
  But there still are deadlocks!
\end{frame}