From owner-freebsd-hackers@FreeBSD.ORG Sun Feb 27 21:26:20 2011 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 42D481065672 for ; Sun, 27 Feb 2011 21:26:20 +0000 (UTC) (envelope-from yuri@rawbw.com) Received: from shell0.rawbw.com (shell0.rawbw.com [198.144.192.45]) by mx1.freebsd.org (Postfix) with ESMTP id 2E24E8FC16 for ; Sun, 27 Feb 2011 21:26:19 +0000 (UTC) Received: from eagle.yuri.org (stunnel@localhost [127.0.0.1]) (authenticated bits=0) by shell0.rawbw.com (8.14.4/8.14.4) with ESMTP id p1RLNRoG073241; Sun, 27 Feb 2011 13:23:27 -0800 (PST) (envelope-from yuri@rawbw.com) Message-ID: <4D6AC17A.7020505@rawbw.com> Date: Sun, 27 Feb 2011 13:26:18 -0800 From: Yuri User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.1.16) Gecko/20101211 Thunderbird/3.0.11 MIME-Version: 1.0 To: freebsd-hackers@freebsd.org References: <4D6ABA14.80208@rawbw.com> In-Reply-To: <4D6ABA14.80208@rawbw.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Garrett Cooper , standards@freebsd.org, davidxu@freebsd.org Subject: Re: Is pthread_cond_signal(3) man page correct? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Feb 2011 21:26:20 -0000 Forwarding to standards@ and davidxu@ per Garrett Cooper suggestion. Also I want to add that I came to this question while observing behavior consistent with multiple wakeup on FreeBSD-8.1. The heavily multi-threaded code that assumes that only one thread can be woken up by one pthread_cond_signal call crashes, and the only reasonable explanation so far is that more than one threads are actually being woken up. Yuri On 02/27/2011 12:54, Yuri wrote: > On FreeBSD-8.1 this page says: > The pthread_cond_signal() function unblocks one thread waiting for the > condition variable cond. > > On Linux it says: > The /pthread_cond_signal/() function shall unblock at least one of the > threads that are blocked on the specified condition variable /cond/ > (if any threads are blocked on /cond/). > > Also HP page > (http://docs.hp.com/en/B2355-90130/pthread_cond_signal.3T.html) says: > "If there are no threads blocked on /cond/, this function has no > effect." And later it says: "It is possible that more than one thread > can be unblocked due to a spurious wakeup." > > This is quite confusing: in case nobody is waiting does it block or > not? In case other threads are waiting it's really "any arbitrary > number of threads are woken up"? Or on FreeBSD it's strictly 1? > Shouldn't this be defined in one and only way by POSIX and all > POSIX-compliant systems should work exactly the same. > > I think man page should be expanded to give more comprehensive > explanation. > > Yuri > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to > "freebsd-hackers-unsubscribe@freebsd.org" >