From owner-freebsd-current@FreeBSD.ORG Wed Mar 14 03:54:13 2007 Return-Path: X-Original-To: current@freebsd.org Delivered-To: freebsd-current@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 42DC016A405 for ; Wed, 14 Mar 2007 03:54:13 +0000 (UTC) (envelope-from julian@elischer.org) Received: from outW.internet-mail-service.net (outW.internet-mail-service.net [216.240.47.246]) by mx1.freebsd.org (Postfix) with ESMTP id 2918613C457 for ; Wed, 14 Mar 2007 03:54:13 +0000 (UTC) (envelope-from julian@elischer.org) Received: from mx0.idiom.com (HELO idiom.com) (216.240.32.160) by out.internet-mail-service.net (qpsmtpd/0.32) with ESMTP; Tue, 13 Mar 2007 20:27:10 -0700 Received: from [192.168.2.5] (home.elischer.org [216.240.48.38]) by idiom.com (Postfix) with ESMTP id CAD34125B99; Tue, 13 Mar 2007 20:54:11 -0700 (PDT) Message-ID: <45F771E2.9050709@elischer.org> Date: Tue, 13 Mar 2007 20:54:10 -0700 From: Julian Elischer User-Agent: Thunderbird 1.5.0.10 (Macintosh/20070221) MIME-Version: 1.0 To: Julian Elischer References: <200703092241.l29Mf2Ds062856@repoman.freebsd.org> <200703121535.22140.jhb@freebsd.org> <20070312200345.GB5688@garage.freebsd.pl> <200703121618.41084.jhb@freebsd.org> <45F5E1F9.5090806@elischer.org> <20070313010309.Q25395@fledge.watson.org> <45F73AE7.6010508@elischer.org> In-Reply-To: <45F73AE7.6010508@elischer.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Pawel Jakub Dawidek , Robert Watson , current@freebsd.org Subject: Re: [RFC] locking.9 X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Mar 2007 03:54:13 -0000 Julian Elischer wrote: > > ok so how about I commit this to get us started and the nroff and > locking experts can take it from there. > The first table I think may look like this (from quick reading.. but I may be wrong): The following table shows what you can and can not do if you hold one of the synchronisation primatives discussed here: (someone who knows what they are talking about should write this table) You have: You want: Spin_mtx Slp_mtx sx_lock rw_lock sleep SPIN mutex ok no no no no-3 Sleep mutex ok ok-1 no ok no-3 sx_lock ok no ?? no ok-4 rw_lock ok no no ok-2 no-3 *1 Recursion is defined per lock. lock order is important. *2 readers can recurse tough writers can not. lock order is important. *3 There are calls atomically release this primative when going to sleep and reacquire it on wakeup (e.g. mtx_sleep(), rw-sleep() and msleep_spin).() *4 One can also use sx_sleep() which atomically release this primative when going to sleep and reacquire it on wakeup.