Date: Tue, 05 Jan 1999 17:00:23 -0700 From: Wes Peters <wes@softweyr.com> To: Nate Williams <nate@mt.sri.com> Cc: Terry Lambert <tlambert@primenet.com>, narvi@haldjas.folklore.ee, bright@hotjobs.com, hackers@FreeBSD.ORG Subject: Re: question about re-entrancy. Message-ID: <3692A797.975E8433@softweyr.com> References: <199901052008.NAA09332@mt.sri.com> <199901052245.PAA24981@usr02.primenet.com> <199901052249.PAA10421@mt.sri.com> <3692A39C.889BF032@softweyr.com> <199901052348.QAA10896@mt.sri.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Nate Williams wrote: > > > The problem with this model, which is commonly used, is that I hold the > > read-lock on the first device while waiting to acquire the write-lock > > on the second, or vice versa. A parallel waiting system, in which another > > potential reader of the first device can "take away" my lock if I'm still > > pending for another resource, alleviates this problem. You have to avoid > > priority problems when doing this, but inherited priorities are a pretty > > well understood solution to this problem. > > One of the more common ways I've seen this done is through a 'resource > manager' inside of the kernel which guarantees that you 'lock down' the > resources in exactly the same order. Unfortunately, this tends to be a > bottleneck on highly parallel systems. ;( I guess your "resource manager" *is* my "parallel waiting system." I've only looked at this in a deeply embedded context, where the 3 processors share a single coherent cache and transaction-oriented memory bus, so my experience may not be completely scalable. I should add that it's not working yet either. ;^) The working idea is that if I have acquired a lock on one of a set of objects, but not all of the objects (therefore I'm sleeping), a higher priority task can 'steal back' an object from me. While quite flexible, it requires *very careful attention* to priorities, and opens up avenues to deadlocks that boggle the mind. In our particular application, it is quite a neat little trick, where we have three processors and what amounts to seven input queues and seven output queues, and need to route data between 1..7 of the queues at a time. -- Where am I, and what am I doing in this handbasket? Wes Peters +1.801.915.2061 Softweyr LLC wes@softweyr.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3692A797.975E8433>