#c #linux #concurrency #linux-kernel #spinlock
#c #linux #параллелизм #linux-ядро #spinlock
Вопрос:
Я реализовал базовый модуль ядра Linux с помощью /proc .
Он может добавлять элементы в связанный список с echo add number > /proc/list
помощью и удалять элементы из списка с echo remove number > /proc/list
помощью . Я добавил spin_lock
и spin_unlock
вокруг всех критических разделов (добавление и удаление элементов elements из списка).
Как я могу проверить, что spinlocks работают правильно? Я попытался создать 2 сценария, один для добавления элементов, а другой для удаления, а затем выполнить их одновременно с ./script1.sh amp; ./script2.sh
. Но результат один и тот же с и без spinlocks.
Комментарии:
1. Параллельные проблемы всегда сложно тестировать и отлаживать. «Как я могу проверить, что блокировки работают правильно?» — Поскольку критический раздел для спин-блокировок не должен быть «слишком длинным» и не должен использовать ожидание, в сценарии тестирования вам нужно вводить этот раздел из нескольких потоков столько раз, сколько сможете. Чем больше раз вы заходите в раздел из разных потоков, тем больше вероятность одновременного входа у вас есть.
2. Обратите также внимание, что вам нужно создать тестовый сценарий таким образом, чтобы одновременный ввод (как будто без спин-блокировок ) действительно мог быть обнаружен : вызвать срабатывание ОШИБКИ, ошибку или другое поведение, которое вы могли бы обнаружить.
3. Спасибо, мне удалось сделать это с помощью большего количества звонков.