Здравствуйте.
Есть вопрос по использованию блокировок чтения-записи для спин-блокировок в ядре. А точнее, как часто можно их захватывать. Выбор пал на спин-блокировки, по причине, не перевода задачи в блокированное состояние и переключение контекста.
Есть структура (двусвязный список), для примера:
struct list {
rw_lock_t *list_lock;
char *pointer;
struct list *next;
struct list *prev;
}
Для доступа на чтение к pointer захватываем блокировки read_lock и read_unlock соответственно. Происходит это достаточно часто... Может 1000, а может и 10000 раз в секунду (точно не измерял). Соответственно для записи write_lock и write_unlock. Запись происходит редко...
Собственно, в момент захвата блокировки, в рандомный момент ядро падает в панику. т.е. может упасть через минуту работы а может и больше... Падает на ф-ции чтения состояния блокировки, точно не помню как называется.
И по этому вопрос, как часто эти блокировки можно захватывать?
И какое кол-во их(блокировок) можно «наплодить»? т.к. структкра может разростись до 1000-10000 записей...
А может я что-то делаю не так?
UPD: на сколько я помню, падало именно при захвате на запись... но это не точно... т.к. эти изыскания я делала может пол а может год назад. Пока код работает вообще бед блокировок... но этож не тру... )))