semaphores between processes

Andrew Gallatin gallatin at
Fri Oct 23 16:27:51 UTC 2009

Daniel Eischen wrote:

> We already use umtx.  This really is a hack and I wouldn't
> advocate it.  I'm not sure how you could make it work and
> not break existing ability to return appropriate error
> codes without slowing down the path in the non-shared
> case.  You'd have to check to see if the address space
> was shared or not, which would require a system call.

I'm probably missing something.  What does it matter if the
address space is shared, as long as the umtx struct is
in shared memory?

 From my quick read, the umtx operations use a lock word
in userspace. For uncontested locks, they use atomic
ops to flip an id into the lock word.  The kernel takes
over for contested locks, and does sleeping, wakup, etc.
Is this correct?  Is there something here that matters
if the address space (and not just the lock word) is

> All our public pthread_foo() symbols are weak.  You
> can easily override them in your application code in
> the #ifdef freebsd case.  What is wrong with providing
> your own library that overrides them to do what you
> require - this shouldn't change your application code?

For our code, I was thinking of something like:

#ifdef FreeBSD
#define lock(x) umtx_lock(x, getpid())
#define unlock(x) umtx_unlock(x, getpid())
#define lock(x) pthread_mutex_lock(x)
#define unlock(x) pthread_mutex_lock(x)

I should probably just shut up and try it..


More information about the freebsd-hackers mailing list