Книга: Разработка ядра Linux
Состояния конкуренции, связанные с таймерами
Состояния конкуренции, связанные с таймерами
Так как таймеры выполняются асинхронно по отношению к выполняемому в данный момент коду, то потенциально могут возникнуть несколько типов состояний конкуренции за ресурсы. Во-первых, никогда нельзя использовать следующий код, как замену функции mod_timer()
.
del_timer(my_timer);
my_timer->expires = jiffies + new_delay;
add_timer(my_timer);
Во-вторых, практически во всех случаях следует использовать функцию del_timer_sync()
, а не функцию del_timer()
. В противном случае нельзя гарантировать, что обработчик таймера в данный момент не выполняется. Представьте себе, что после удаления таймера код освободит память или каким-либо другим образом вмешается в ресурсы, которые использует обработчик таймера. Поэтому синхронная версия более предпочтительна.
Наконец, необходимо гарантировать защиту всех совместно используемых дан- пых, к которым обращается функция-обработчик таймера. Ядро выполняет эту функцию асинхронно по отношению к другому коду. Совместно используемые данные должны защищаться так, как рассматривалось в главах 8 и 9.
- 1.4 Структуры данных, связанные с драйверами устройств Windows
- Риски, связанные с хостингом и потерей данных
- Правило 16. Группируйте связанные между собой элементы
- Риски, связанные с администрированием домена
- 23.11. Управление таймерами
- Опыт конкуренции в России: причины успехов и неудач
- Эмоции, связанные непосредственно с покупательским опытом
- 10.6.2. Наборы сигналов: sigset_t и связанные функции
- Приложение А Связанные списки
- Системные вызовы, связанные с управлением стратегией и приоритетом
- Критические участки и состояние конкуренции за ресурсы
- Когда лучше использовать данные, связанные с процессорами