92/212
\begin{frame}
  \frametitle{2 Phase Locking Protocol}
  
  2 PL is the concurrency control protocol used in most DBMSs:

  \begin{goal}{2 Phase Locking (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}
    A transaction \alert{cannot get new locks once it releases any lock}.
  \end{goal}
  \pause
  
  \smallskip
  \begin{tcenter}
    \begin{tikzpicture}[nodes={black,scale=.8}]
      \draw [thick,->] (0,0) -- node [at end,above] {time} (7cm,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) -- (3.5cm,1.5cm) -- node [sloped,above] {release phase} (5.5cm,0cm);
    \end{tikzpicture}
  \end{tcenter}
  \smallskip
  \pause
    
  \begin{block}{Theorem}
    Any schedule that confirms to 2 PL is conflict-serializable.
  \end{block}
\end{frame}