Re: Synchronization primitives (Was: Re: An example of bugs for Hot Standby)

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Re: Synchronization primitives (Was: Re: An example of bugs for Hot Standby)
Дата
Msg-id 4B57501F.8030804@enterprisedb.com
обсуждение исходный текст
Ответ на Re: Synchronization primitives (Was: Re: An example of bugs for Hot Standby)  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Synchronization primitives (Was: Re: An example of bugs for Hot Standby)  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Tom Lane wrote:
> Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> writes:
>> Streaming Replication introduces a few places with a polling pattern
>> like this (in pseudocode):
> 
>> while()
>> {
>>   /* Check if variable in shared has advanced beoynd X */
>>   SpinLockAcquire()
>>   localvar = sharedvar;
>>   SpinLockRelease()
>>   if (localvar > X)
>>     break;
> 
>>   /* Not yet. Sleep
>>   pg_usleep(100);
>> }
> 
> I trust there's a CHECK_FOR_INTERRUPTS in there ...
> 
>> It would be nice to have a new synchronization primitive for that.
> 
> Maybe.  The lock, the variable, the comparison operation, and the sleep
> time all seem rather specific to each application.  Not sure that it'd
> really buy much to try to turn it into a generic subroutine.

My point is that we should replace such polling loops with something
non-polling, using wait/signal or semaphores or something. That gets
quite a bit more complex. You'd probably still have the loop, but
instead of pg_usleep() you'd call some new primitive function that waits
until the shared variable changes.

--  Heikki Linnakangas EnterpriseDB   http://www.enterprisedb.com


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

Предыдущее
От: Simon Riggs
Дата:
Сообщение: Re: An example of bugs for Hot Standby
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Synchronization primitives (Was: Re: An example of bugs for Hot Standby)