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>