parlib: Implement uthread mutexes with semaphores
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 6 Apr 2017 16:43:13 +0000 (12:43 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 3 May 2017 16:13:02 +0000 (12:13 -0400)
commit81cc197b157d1a82c7e2ab2c0f838370d438b042
treeb2f5438baada11622a37d636d6a55b3693fab04f
parent61929f2afb0bcc0220c4a3eb7177cb9dced7df64
parlib: Implement uthread mutexes with semaphores

Mutexes are now wrappers around semaphores of value 1.  For the most part,
this commit moves the old mutex logic into semaphore functions (renaming
mtx->sem), and then changes the locking logic from 'locked' to 'count'.
Note the mutexes and semaphores use different once_ctl functions, and the
semaphore static initializer sets count directly.

I probably should have done this from the start.  There's a good chance
we'll implement user/pthread/semaphore.h with uthread semaphores, in an
effort to not have a dozen different synchronization functions.  Though
that one might end up being a kernel #device if we need inter-process
semaphores.  (All the uthread sync is intra-process.)

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/include/parlib/uthread.h
user/parlib/mutex.c
user/utest/cv.c