WITNESS for pthreads

John Baldwin jhb at freebsd.org
Tue Mar 31 08:34:39 PDT 2009

On Tuesday 31 March 2009 11:11:02 am Randall Stewart wrote:
> This was one of the places I was heading (as I wrote privately to  
> Daniel ;-D)
> I suppose I can share it all i.e. the pthread mutex stuff
> will of course work with shared mutexe's but it won't:
> a) Build an easy to use semantic for the app to agree on sharing  
> memory.. i.e. you
>    have left undefined how the process figure out what they are  
> sharing. There is
>    some value in setting up a easy semantic for app dev's to use.

You can use shm_open() to share memory regions by name and then create mutexes 
and condvars in that.

> <i.e. insert the mmap and all the other goo through an additional  
> interface>
> b) What happens when a process exits or hits a core dump while holding  
> one
>    of these mutex's? Is this what you are thinking the PROCESS_SHARED  
> would
>    do??

There is a "robust" mutex extension David Xu mentioned.  Presumably though 
what would happen is that when one thread went to block on a mutex, the 
kernel (in the umtx code) would see if the current owning thread had exited, 
and if so, do something "appropriate" (break the lock, etc.) at that time.  I 
think a (pid, tid, process starttime) tuple would work ok for detecting this.

> <i.e. I don't think a process by itself can fully solve this... maybe  
> the
>     PROCESS_SHARED could be made to help here>
> c) If you build something to do <a> so you have some nice way of naming
>    mutex's you can do something similar to our WITNESS option in the
>    kernel... this is something the few times I have played in user
>    space recently that I have missed... having LOR warnings and such
>    can be a useful tool. You can't have this without <a> IMO.
> I was am interested in a/b but one of my long term intents is to do  
> <c> ;-)

All my WITNESS thoughts are completely separate from PROCESS_SHARED mutexes 
and I think actually break PROCESS_SHARED mutexes.  (Though perhaps they can 
still be made to work but using something far more invasive where WITNESS 
defines its own pthread_mutex structure that the app has to be compiled 

John Baldwin

More information about the freebsd-threads mailing list