What is the status of thread process-shared synchronization?
kometto at web.de
Thu Feb 6 01:26:44 UTC 2014
John Baldwin <jhb at 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
>> 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
... About to fork.
 PARENT: sleeping for 1 second.
 CHILD: acquiring mutex.
 CHILD: sleeping for 2 seconds.
 PARENT: acquiring mutex
 PARENT: waking child.
 PARENT: waiting for child.
 CHILD: waiting to be woken.
load: 3.71 cmd: test 47522 [uwait] 17.86r 0.00u 0.00s 0% 2084k
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.
More information about the freebsd-threads