From owner-freebsd-threads@FreeBSD.ORG Sat Dec 6 10:24:41 2003 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5BABB16A4CE for ; Sat, 6 Dec 2003 10:24:41 -0800 (PST) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6A52943FD7 for ; Sat, 6 Dec 2003 10:24:40 -0800 (PST) (envelope-from eischen@vigrid.com) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mail.pcnet.com (8.12.10/8.12.1) with ESMTP id hB6IOdml018231; Sat, 6 Dec 2003 13:24:39 -0500 (EST) Date: Sat, 6 Dec 2003 13:24:39 -0500 (EST) From: Daniel Eischen X-Sender: eischen@pcnet5.pcnet.com To: Igor Sysoev In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: threads@freebsd.org Subject: Re: pthread_mutex_trylock() should never block X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: deischen@freebsd.org List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Dec 2003 18:24:41 -0000 On Sat, 6 Dec 2003, Igor Sysoev wrote: > The current pthread_mutex_trylock() implementation in both libpthread (libkse) > and libthr can block if mutex is locked by another thread. > > libphtread calls THR_LOCK_ACQUIRE() and it can be blocked. That's an implementation detail. Threads release the low-level lock (THR_LOCK_ACQUIRE/THR_LOCK_RELEASE) after they take the mutex. I don't believe we (libpthread) are conflicting with POSIX in this respect. > libthr's pthread_mutex_trylock() is too heavy - it calls 3 syscalls: > sigprocmask()/umtx_lock()/sigprocmask() and can be blocked too. > > > SUSv2 states: > [ http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_mutex_lock.html ] > > -------- > The function pthread_mutex_trylock() is identical to pthread_mutex_lock() > except that if the mutex object referenced by mutex is currently locked > (by any thread, including the current thread), the call returns immediately. The low-level locks are necessary (at least in libpthread implementation) to safely test the mutex for ownership. -- Dan Eischen