Condition variables
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 25 Oct 2012 21:08:13 +0000 (14:08 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 25 Oct 2012 21:08:13 +0000 (14:08 -0700)
commit8a5211f683646b1961d4bc7b70e43383538574f0
tree015eda1c9fdcde1e16cf98de636c6c62f2b47098
parent663bc768188b5e5d775d81d7dc106677be7b0330
Condition variables

Built with semaphores.  This is notoriously tricky, and I might not have
done it correctly.

See http://research.microsoft.com/pubs/64242/implementingcvs.pdf for a
discussion of some of the issues.

I get around it by peaking in the semaphore and using its count as a
'lock' to enforce an ordering on waiters so that the order in which you
hit the CV is the order that you hit the internal sem.  And since it's
the sem's count, we can atomically sleep on the sem and 'release' that
'lock'.
kern/include/kthread.h
kern/src/kthread.c
kern/src/testing.c