completed Lec 5 notes
authorKyle Spaans <kspaans@student.math.uwaterloo.ca>
Tue, 19 May 2009 19:59:51 +0000 (15:59 -0400)
committerKyle Spaans <kspaans@student.math.uwaterloo.ca>
Tue, 19 May 2009 19:59:51 +0000 (15:59 -0400)
lec05-0519.tex

index 5898cdd..3159ec4 100644 (file)
@@ -36,6 +36,27 @@ only moves thread to the ready queue, out of the sleeping queue.
 \subsection*{Implementing Locks}
 It should not be very hard to implement them, we just need to make sure that
 we've got them correct, since they will be used everywhere in the rest of
-\emph{OS161}.
+\emph{OS161}. Locks are less general than semaphores, but has some handy
+features. Locks enforce that only the thread that acquired the lock can release
+it.
+
+\subsection*{Condition Variables}
+Designed to be used inside of a critical section, it is always associated with
+an acquired lock. CV's have three main functions: \texttt{cv\_wait()} which is
+like \texttt{P()}, \texttt{cv\_signal()} which is like \texttt{V()}, and
+\texttt{cv\_broadcast()} which is also like \texttt{V()} but will wakeup all
+threads that are sleeping on that CV. \texttt{Cv\_wait()} is interesting
+because it takes a CV and a lock, and releases the lock, giving another thread
+a chance to use it. It will also reacquire the lock before returning to the
+calling thread. We like CVs because they allow us to sleep on arbitrary
+conditions, rather than just an address. Also, a CV can be signalled, but if
+there are no waiting threads, then nothing will happen.
+
+\subsection*{Introduction to Monitors}
+The idea of CVs come from Monitors, which are a programming language contruct.
+This means that they have to be supported by the compiler. We can however
+emulate their behaviour with careful use of locks and condition variables. This
+will pay off later, reducing the likelyhood that we will encounter concurrency
+bugs in later assignments.
 
 \end{document}