From owner-freebsd-threads@FreeBSD.ORG Mon Mar 30 23:56:12 2009 Return-Path: Delivered-To: threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B82C2106566B for ; Mon, 30 Mar 2009 23:56:12 +0000 (UTC) (envelope-from deischen@freebsd.org) Received: from mail.netplex.net (mail.netplex.net [204.213.176.10]) by mx1.freebsd.org (Postfix) with ESMTP id 723C58FC0C for ; Mon, 30 Mar 2009 23:56:12 +0000 (UTC) (envelope-from deischen@freebsd.org) Received: from sea.ntplx.net (sea.ntplx.net [204.213.176.11]) by mail.netplex.net (8.14.3/8.14.3/NETPLEX) with ESMTP id n2UNuBF5008464; Mon, 30 Mar 2009 19:56:11 -0400 (EDT) X-Virus-Scanned: by AMaViS and Clam AntiVirus (mail.netplex.net) X-Greylist: Message whitelisted by DRAC access database, not delayed by milter-greylist-4.0 (mail.netplex.net [204.213.176.10]); Mon, 30 Mar 2009 19:56:11 -0400 (EDT) Date: Mon, 30 Mar 2009 19:56:11 -0400 (EDT) From: Daniel Eischen X-X-Sender: eischen@sea.ntplx.net To: Randall Stewart In-Reply-To: Message-ID: References: <7D4F6788-0F12-4863-9635-7FADA9115D16@lakerest.net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: threads@freebsd.org Subject: Re: A mutex for inter-process ;-) X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Daniel Eischen List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Mar 2009 23:56:13 -0000 On Mon, 30 Mar 2009, Randall Stewart wrote: > > On Mar 30, 2009, at 5:22 PM, Daniel Eischen wrote: > >> On Mon, 30 Mar 2009, Randall Stewart wrote: >> >>> Hi all: >>> >>> I have recently written a small set of routines that allow >>> two process to have a "mutex" between them.. actually it allows >>> all of the threads in any set of processes to have mutexes between >>> themselves ;-) >>> >>> Anyway it seems to be working fairly well.. I still have to write a man >>> page >>> for it (documentation always last).. and eventually I would like to port >>> in >>> some of the WITNESS type features since the mutex's have names.. >>> >>> I probably should also think about scaling it up a bit.. right now its >>> really >>> more for a small scale (100 or less mutexes)... >>> >>> Who should I talk to about getting this in... having it reviewed etc. I >>> think >>> it belongs in libthr since it really needs the tid of the pthreads from >>> the >>> pthread_t type... and for now I have a horrible hack in to get it ;-) >> >> The real way to do this is to support PTHREAD_PROCESS_SHARED >> mutexes within our normal mutex, and to change our current >> mutex (and cv) types to be structs instead of pointers. >> The current API, other than the type change, shouldn't >> change at all. > > > So how do you propose to name the mutex's so that two disparate > process can locate the same mutex? They are placed in shared memory, according to POSIX. > I don't see how a pthread_mutex can suffice... we need more than > just the current mutex... > > What am I missing? As far as I know, David Xu implemented the kernel hooks for umtx (the underlying mutex in pthread mutex) to be shared. As soon as you can place the entire userland pthread_mutex_t struct in shared memory, it should all just work (with probably some trivial changes in libthr). The harder part is versioning all the symbols that currently think pthread_mutex_t, pthread_cond_t, etc, are pointers, and defining the structs with enough foresight so that it is unlikely we have to modify them in the future (causing a future ABI breakage), and also aligning them nicely for the various archs. You should really look at how POSIX defines process shared mutex, cvs, etc. See: pthread_barrierattr_[gs]etpshared() pthread_condattr_[gs]etpshared() pthread_mutexattr_[gs]etpshared() pthread_wrlockattr_[gs]etsphared() You can use this as a starting point: http://www.opengroup.org/onlinepubs/009695399/ http://www.opengroup.org/onlinepubs/009695399/functions/pthread_barrierattr_setpshared.html http://www.opengroup.org/onlinepubs/009695399/functions/pthread_condattr_setpshared.html http://www.opengroup.org/onlinepubs/009695399/functions/pthread_mutexattr_setpshared.html http://www.opengroup.org/onlinepubs/009695399/functions/pthread_rwlockattr_setpshared.html -- DE