Как я могу проверить, что spin_lock работает правильно?

#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. Спасибо, мне удалось сделать это с помощью большего количества звонков.