A mutex for inter-process ;-)

Daniel Eischen deischen at freebsd.org
Sun Apr 12 12:23:53 PDT 2009


On Wed, 8 Apr 2009, Randall Stewart wrote:

> Daniel:
>
> Ok due to working on a sun benchmark (libMicro) I have
> came back to this again :-)
>
> Turns our our friends at sun in their benchmark arrange for
> threads in separate process, all started by the same parent
> process, to collaborate by using pthread_mutex and pthread_cond
> variables. These are allocated in the main process and mmap()'d into
> shared memory.  Of course none of this works at all in FreeBSD.
>
> The reason being that both the pthread_mutex_init and pthread_cond_init
> under the covers allocate memory for the real pthread_mutex or pthread_cond
> structure.. not the pointer the user hangs on to. So sun's benchmarks
> all hang if multiple process are involved since they all go to wait
> on a local condition variable ;-)
>
> I suppose in Sun's Solaris the pthread_mutex structure is the entire
> structure so that when they mmap it they get it all in shm...
>
> So, what really needs to be done here is we rework the
> pthread_cond/mutex to allowed the shared attribute that they are
> setting (yes they do this) to actually do something. Of course just
> being aware of the issue does not solve the problem.. since you really
> need to NOT malloc inside the cond/mutex init code to make this work.. and
> instead make the "private" structures setup so the user can malloc these.

Please see my original reply to this:

   http://docs.freebsd.org/cgi/getmsg.cgi?fetch=12714+0+archive/2009/freebsd-threads/20090405.freebsd-threads

"... and to change our current mutex (and cv) types
to be structs instead of pointers."

-- 
DE


More information about the freebsd-threads mailing list