lwlocks and starvation
От | Neil Conway |
---|---|
Тема | lwlocks and starvation |
Дата | |
Msg-id | 1101284611.12045.49.camel@localhost.localdomain обсуждение исходный текст |
Ответы |
Re: lwlocks and starvation
Re: lwlocks and starvation |
Список | pgsql-hackers |
LWLockRelease() currently does something like (simplifying a lot): acquire lwlock spinlock decrement lock count if lock is free if first waiter in queue is waiting for exclusivelock, awaken him; else, walk through the queue and awaken all the shared waiters until we reach an exclusivewaiter end if release lwlock spinlock This has the nice property that locks are granted in FIFO order. Is it essential that we maintain that property? If not, we could instead walk through the wait queue and awaken *all* the shared waiters, and get a small improvement in throughput. I can see that this might starve exclusive waiters; however, we allow the following: Proc A => LWLockAcquire(lock, LW_SHARED); -- succeeds Proc B => LWLockAcquire(lock, LW_EXCLUSIVE); -- blocks ProcC => LWLockAcquire(lock, LW_SHARED); -- succeeds i.e. we don't *really* follow strict FIFO order anyway. -Neil
В списке pgsql-hackers по дате отправления: