ipig wrote: > Hi, > Thanks for your reply. > I changed the format to plain text. > > For the question, suppose that process p0 held the lock of object A, and > the wait queue for A is p1,p2,p3,...., that process p1 is the first waiter in > the queue. > Since p1 is in the wait queue, the lock p1 requests must be conflict with > the lock p0 held. > That is to say, if p0 wants to lock A again, then p0 will be put before > p1, and p0 will be at the head of the queue. Why do we need to find the first > waiter which conflicts p0? I think that p0 must be added at the head of the > wait queue. > > For your example, p0 has a read lock and wants an exclusive lock. > Since p0 has a read lock, then in the queue, p1 must wait an exclusive > lock. > Then p0 will be put before p1, and p0 will be at the head of the queue. > > Is there anything I misunderstood?
I am guessing that p0 is put at the head _only_ if there are conflicting locks so that p0 does not starve other waiting processes. -- Bruce Momjian http://candle.pha.pa.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. + ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org