ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Вопрос по будущему кэшированию.



On Wed, May 07, 2008 at 10:36:31PM +0100, Valery Kholodkov wrote:

> Igor Sysoev пишет:
> 
> >>Что мешает получать уведомления сигналом через lio_listio
> >>с флагом LIO_NOWAIT?
> >
> >Вот сигналов хотелось бы избежать. Совсем.
> 
> Почему?

Потому что работать с обработчиками сигналов достаточно сложно - они,
например, могут прийти в середине malloc()а. А ещё лучше работать с
сигналами не обработчиками, а в виде событий, как в sigtimedwait().
Поэтому идеально в обработчике просто выставлять атомарную переменную.
Если же что-то более сложное, то нужно блокировать сигналы там, где
они нежелательны, лучше как-то так:

sigprocmask(SIG_UNBLOCK)
kevent/epoll/select/poll/etc
sigprocmask(SIG_BLOCK)

Однако, тут возможен race condition, когда сигнал будет получен до
kevent/etc, а мы можем надолго застрять в kevent/etc. То есть, нужно
атомарное расблокирование сигнала и ожидание, как в pselect, ppoll.


-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.