cvs commit: src/sys/kern kern_rwlock.c src/sys/sys rwlock.h
David Schultz
das at FreeBSD.ORG
Wed Apr 2 14:53:20 UTC 2008
On Tue, Apr 01, 2008, Jeff Roberson wrote:
> On Wed, 2 Apr 2008, Max Laier wrote:
>
> >On Tuesday 01 April 2008 22:31:55 Attilio Rao wrote:
> >>attilio 2008-04-01 20:31:55 UTC
> >>
> >> FreeBSD src repository
> >>
> >> Modified files:
> >> sys/kern kern_rwlock.c
> >> sys/sys rwlock.h
> >> Log:
> >> Add rw_try_rlock() and rw_try_wlock() to rwlocks.
> >> These functions try the specified operation (rlocking and wlocking)
> >>and true is returned if the operation completes, false otherwise.
> >
> >hmmm ... I'm certainly missing something here, but what's a possible
> >usecase for these? It seems there is not much you can do if you can't
> >obtain a rw_lock. I can understand the need for sx_try_* where you want
> >to avoid sleeping, but I can't figure out the need for it on a locking
> >primitive that will only spin or wait (not 100% sure about the
> >terminology here). This is especially strange for rw_try_wlock, unless
> >you plan to sleep manually on fail. But then again you'd have a good
> >chance that you have to do it over and over again if timing is
> >unfortunate.
>
> I asked for it. We have a try operation for mtx already. I was
> experimenting with converting some code to use rwlocks from mtx and it
> required it. The specific case is in the softdep code where it uses
> trylock to avoid deadlocking. With trylock you can violate the lockorder.
One reason that many systems don't provide a rw_try_wlock()
primitive is that a constant stream of readers can easily starve
threads attempting to acquire the write lock without waiting.
There are probably situations where this isn't a problem, though,
e.g., if readers rarely hold the lock for a long time...
More information about the cvs-src
mailing list