cvs commit: src/lib/libthr/thread thr_kern.c thr_mutex.c
thr_private.h
Mike Makonnen
mtm at FreeBSD.org
Mon May 12 03:48:03 PDT 2003
mtm 2003/05/12 03:48:02 PDT
FreeBSD src repository
Modified files:
lib/libthr/thread thr_kern.c thr_mutex.c thr_private.h
Log:
Forced commit, for previous revision.
Make state transitions of a thread on a mutex queue
atomic (with respect to other threads and signal handlers).
This includes:
o Introduce two functions to implement atomicity with respect
to other threads and signal handlers. Basically,
_thread_critical_enter() locks the calling thread and blocks
signals. _thread_critical_exit() unblocks signals and unlocks
the thread.
o Introduce two new functions:
get_muncontested() locks a mutex that is not owned by
another thread.
get_mcontested() places a thread on a contested mutex's
queue, taking care to use the _thread_critical_enter/exit
functions to protect thread state.
o Modify mutex_unlock_common() to also protect state transitions.
In this case it needs the cooperation of mutex_queue_deq(), which
must return with the thread locked and signals disabled *before*
it takes the thread off the queue.
Combine _pthread_mutex_lock() and _pthread_mutex_trylock()
into one function: mutex_lock_common(), that can handle
both cases. Its behaviour is controlled by an argument,
int nonblock, which if not zero means do not attempt
to acquire a contested mutex if the uncontested case fails.
BTW, when I write about contested and uncontested mutexes, I'm writing
about it from the application's point of view. I'm not writing about
internal locking of pthread_mutex->lock, which is achieved differently.
While internal mutex locking is mostly done, there's still a bit more
work left in this area.
Approved by: markm/mentor, re/blanket libthr
Reviewed by: jeff (slightly diff. revision)
Revision Changes Path
1.5 +0 -0 src/lib/libthr/thread/thr_kern.c
1.6 +0 -0 src/lib/libthr/thread/thr_mutex.c
1.6 +0 -0 src/lib/libthr/thread/thr_private.h
More information about the cvs-all
mailing list