From owner-freebsd-threads@FreeBSD.ORG Sun Mar 21 22:50:47 2010 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DE774106564A; Sun, 21 Mar 2010 22:50:47 +0000 (UTC) (envelope-from pldrouin@pldrouin.net) Received: from smtp.cyberfingers.net (smtp.cyberfingers.net [198.177.254.227]) by mx1.freebsd.org (Postfix) with ESMTP id BD19F8FC21; Sun, 21 Mar 2010 22:50:47 +0000 (UTC) Received: from [192.168.1.106] (CPE0023695b905f-CM001a666aca96.cpe.net.cable.rogers.com [99.246.67.95]) by smtp.cyberfingers.net (Postfix) with ESMTP id C03F3AB6C72; Sun, 21 Mar 2010 18:50:46 -0400 (EDT) Message-ID: <4BA6A2C5.3030808@pldrouin.net> Date: Sun, 21 Mar 2010 18:50:45 -0400 From: Pierre-Luc Drouin User-Agent: Thunderbird 2.0.0.24 (X11/20100317) MIME-Version: 1.0 To: Daniel Eischen References: <4BA64260.5000009@pldrouin.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-threads@freebsd.org Subject: Re: Portable Conditional Wait for Inter-Process? X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Mar 2010 22:50:48 -0000 Regarding process groups, how can I set two processes to belong to the same process group if they don't have a parent-child relation? Thanks! Daniel Eischen wrote: > On Sun, 21 Mar 2010, Pierre-Luc Drouin wrote: > >> Hi, >> >> I am looking for a portable solution to put a process into a timed >> wait (a la pthread_cond_timedwait) such that it can be waken up by >> another process using something similar to pthread_cond_broadcast >> (there might be many waiters). I guess shared pthread condition >> variables are not supported by FreeBSD, right? Is there a portable >> way to do this? The only solution I can think of right now is to use >> alarm and sigwait on the waiters side and kill(wpid,SIGCONT) on the >> other side with a list of pids. > > Yeah, shared mutexes and CVs are not yet supported by FreeBSD. > You can use sigtimedwait() to conditionally sleep and kill > on the other side, but with caveats: > > o Only one thread per process can be woken with > sigwait() and friends > > o You must ensure that no other threads (other than > the waiter) have the "wake" signal unmasked. > > You might consider using killpg() to send a signal to > multiple processes in a process group. > > FreeBSD current (9.0) recently added support for shared semapores, > so you could give those a try. You might be able to use > sem_timedwait() instead of pthread_cond_timedwait() depending on > your needs, but you are limited to waking only one thread > at a time via sem_post(). > > You could also have a pipe or domain socket between the sender > and each waiting processes. I suppose you could use aio_write() > on the sender side to write to selected file descriptors with > one operation. The waiters would be using poll() or select() > with a timeout. >