LINUX.ORG.RU

Выбор между SPINLOCK и RWLOCK


0

1

Здравствуйте. Возникла необходимость написать модуль ядра для Linux/IPTables. Опыта программирования под Linux очень мало, а написания модулей ядра ещё меньше. Поэтому сразу попрошу не кидаться, если что :)

В процессе разработки возникли вопросы с синхронизацией(блокировками). Модуль обрабатывает поток пакетов от IPTables. В каком именно контексте выполняется код обработчика я, честно говоря, толком не знаю. Какую функцию блокировки мне лучше использовать spin_lock / spin_lock_irqsave / spin_lock_bh? Чем именно они отличаются?

Сам модуль готов. Вроде работает, использую spin_lock_bh. Но не знаю верно ли я выбрал. Так как процессор многоядерный процедура обработки выходит может исполняться в несколько потоков одновременно. А значит лучше может было бы использовать в обработчике read_lock (внутри обработчика пакетов только обращение/чтение из хеш-таблицы)?


Если не знаешь контекста, лучше используй spin_lock_irqsave/spin_unlock_irqrestore. А еще лучше - подучи матчасть, что когда использовать, и в каком контексте ты работаешь.

Ах да, и спинлоки используются для очень коротких блокировок (единицы микросекунд максимум, в идеале - единицы команд).

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.