Date: Wed, 5 Mar 2003 11:40:30 -0800 (PST) From: Julian Elischer <julian@elischer.org> To: John Baldwin <jhb@FreeBSD.org> Cc: cvs-all@FreeBSD.org, cvs-src@FreeBSD.org, src-committers@FreeBSD.org, "Brian F. Feldman" <green@FreeBSD.org> Subject: Re: cvs commit: src/sys/kern kern_mutex.c Message-ID: <Pine.BSF.4.21.0303051134130.61509-100000@InterJet.elischer.org> In-Reply-To: <XFMail.20030305115639.jhb@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 5 Mar 2003, John Baldwin wrote:
>
> On 05-Mar-2003 Julian Elischer wrote:
> >
> >
> > On Tue, 4 Mar 2003, Brian F. Feldman wrote:
>
> mtx_trylock() really should be used sparingly I think. I don't
> want people doing this:
>
> if (!mtx_trylock(foo))
> tsleep(...);
>
> If they want to block on a lock they should use mtx_lock(). Cases
> where one might use mtx_trylock() that I can think of is for
> optional optimizations for cases that might otherwise be a lock
> order violation. I.e., if I can lock two X objects, then I can
> bypass having to lock one, stick it on a queue so that some other
> thread can connect it to the other. The only time I have used it
> is in the OOM killer where I need to be able to lock a process I
> am checking while keeping the current target process locked for
> the whole loop. Really, I want the programmer to think carefully
> when they use mtx_trylock() and blindly recursing on a lock might
> result in some hard to track down bugs.
>
The case I was using it for was basically:
if (!mtx_trylock(foo)) {
queue_data_for_later_proccessing(data)
return;
}
do_the_work_immediatly();
where it was possible that I had called myself as part of
do_the_work_immediatly() and wanted it to complete immediatly
since I knew I already owned the object.
I can see that in other cases you would want the alternative
behaviour however.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0303051134130.61509-100000>
