Re: LWLockWaitUntilFree (was: Group commit, revised)

Поиск
Список
Период
Сортировка
От Jeff Janes
Тема Re: LWLockWaitUntilFree (was: Group commit, revised)
Дата
Msg-id CAMkU=1zpw6-oYnwDe18v2vnRm_GewJOsEmicBRATa3M4kwdnbQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: LWLockWaitUntilFree (was: Group commit, revised)  (Robert Haas <robertmhaas@gmail.com>)
Список pgsql-hackers
On Fri, Feb 3, 2012 at 12:57 PM, Robert Haas <robertmhaas@gmail.com> wrote:
>
> I think I recommended a bad name for this function.  It's really
> LWLockAcquireOrWaitUntilFree.  Can we rename that?
>
> We might also want to consider what all the behaviors are that we
> might want here.  It strikes me that there are two possible actions
> when a lock is immediately available (acquire or noop) and three
> possible actions when it isn't (wait-then-acquire, wait-then-noop, or
> immediate-noop), for a total of six possible combinations:
>
> acquire/wait-then-acquire = LWLockAcquire
> acquire/wait-then-noop = what you just added
> acquire/immediate-noop = LWLockConditionalAcquire
> noop/wait-then-acquire
> noop/wait-then-noop
> noop/immediate-noop
>
> The last one is clearly pointless, since you don't need a lock at all
> to do nothing.  But is there a use case for either of the other two?

You've only considered things with the same mode on each side of the
"/".  One thing that I've wanted is:
acquire-exclusive-immediate-and-return-true/wait-then-acquire-shared-and-return-false.

The idea was that there is something that I need to verify has been
done, but it doesn't matter who did it.  To do the work, I need
exclusive, but to verify that the work has already been done I only
need shared.  So, if I don't get the exclusive lock, then by the time
I can get it the work has probably been done by someone else so I only
need a shared lock to verify that.

Come to think of it, I think what I wanted my behavior for was for
this very thing that inspired this WaitUntilFree, improving
group-commit.  But I see in this case the verification is being done
under a spinlock rather than a shared LWLock.  I don't know if there
is any case left over for my proposed behavior, or if spinlock
verification would always be easy to arrange so as to make it
pointless.

Cheers,

Jeff


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Jeff Janes
Дата:
Сообщение: Re: Checkpoint sync pause
Следующее
От: Jeff Janes
Дата:
Сообщение: Re: Group commit, revised