Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 06 Feb 2014 01:47:10 +0100
From:      Luca Bayer <kometto@web.de>
To:        John Baldwin <jhb@freebsd.org>
Cc:        Alexander Churanov <alexanderchuranov@gmail.com>, David Xu <davidxu@freebsd.org>, freebsd-threads@freebsd.org
Subject:   Re: What is the status of thread process-shared synchronization?
Message-ID:  <20140206.86sirxgj8x@web.de>
In-Reply-To: <201009231006.40019.jhb@freebsd.org> (John Baldwin's message of "Thu, 23 Sep 2010 10:06:39 -0400")
References:  <AANLkTikXSKt0ysmLL7bU2H%2B9vqasmJktpfwwn5mOSSEH@mail.gmail.com> <201009231006.40019.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
John Baldwin <jhb@freebsd.org> writes:

>> Hi folks!
>> 
>> The FreeBSD 8.1 manual pages state that pthread process-shared
>> synchronization option is not supported, at least for some primitives.
>> 
>> 1) Are there any plans to implement this option?
>> 2) Is anybody working on that?
>> 3) What are the main obstacles which prevent us from having the option
>> implemented?
>> 
>> I am teaching students UNIX-like systems in general and FreeBSD in
>> particular. I've set them a task on synchronizing processes reading
>> and writing from a shared-memory cache. But then found that in spite
>> of PTHREAD_PROCESS_SHARED being available, it is not supported. I've
>> endeavored to fix POSIX rwlocks by making pthread_rwlock_t a
>> structure, but then found that POSIX semaphores do not support
>> process-shared attribute either.
>
> I believe POSIX semaphores in 9 do now support PTHREAD_PROCESS_SHARED.  David 
> Xu implemented it.  He may be able to MFC this to 8-stable.

I wonder what's the status of process-shared mutexes. They still don't
work as compared to glibc (linux and kfreebsd). Here's a failing example

http://www.andy-pearce.com/wiki/notes/sharing_pthreads_primitives_between_processes

$ ./test
... About to fork.
[0] PARENT: sleeping for 1 second.
[0] CHILD: acquiring mutex.
[0] CHILD: sleeping for 2 seconds.
[1] PARENT: acquiring mutex
[1] PARENT: waking child.
[1] PARENT: waiting for child.
[2] CHILD: waiting to be woken.
load: 3.71  cmd: test 47522 [uwait] 17.86r 0.00u 0.00s 0% 2084k
^C

where pthread_mutexattr_setpshared() actually returns EINVAL with
PTHREAD_PROCESS_SHARED. It's also not possible to delay loading
-lpthread due to missing pthread stubs in libc.

>
>> 4) Do we have any synchronization primitive capable of synchronizing
>> threads in different processes in FreeBSD?
>
> Unfortunately the various POSIX/SYSV primitives do not currently support it in 
> 8.  You could implement a shared mutex on top of umtx fairly easily I believe.  
> umtx itself is address-space agnostic (so a umtx object can be shared among 
> processes), and the existing pthread_mutex code can probably be borrowed 
> directly to implement a mutex.  I think the biggest obstacle for FreeBSD is 
> changing the definition of pthread_mutex_t, etc. to be structures instead of 
> pointers to dynamically allocated structures.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140206.86sirxgj8x>