атомарные операции arm-linux

Атомарные операции:
Атомарные операции относятся к операциям, которые не могут быть далее разделены.Как правило, атомарные операции используются для переменных или битовых операций.
использовать атомарные операции для
Реализуйте взаимоисключающий доступ к светодиодному устройству, то есть только одно приложение может использовать светодиодный свет одновременно.
В инициализации модуля
функция инициализации:

    /* Инициализировать атомарные переменные */

    atomic_set(&gpioled.lock, 1);/* Начальное значение переменной atomic равно 1 */

открытая функция:

если (!atomic_dec_and_test(&gpioled.lock)) {

        atomic_inc(&gpioled.lock);/* Если меньше 0, добавить 1, чтобы сделать атомарную переменную равной 0 */

        return -EBUSY; /* светодиод используется, возврат занят */

    }

Если функция atomic_dec_and_test возвращает
Если возвращаемое значение равно false, это означает, что текущее значение блокировки отрицательное ( по умолчанию значение блокировки равно 1) , и существует только одна возможность отрицательного значения блокировки , тогда
Да, другие устройства используют светодиод . Если другие устройства используют светодиодные индикаторы, вы можете только выйти, позвоните перед выходом
Функция atomic_inc добавляет к блокировке 1 , так как значение блокировки в это время уменьшается до отрицательного числа, к значению блокировки необходимо добавить 1
становится 0 .

функция выпуска:

    /* Освободить атомарную переменную при закрытии файла драйвера */

    atomic_inc(&dev->lock);

Supongo que te gusta

Origin blog.csdn.net/L1153413073/article/details/125531243
Recomendado
Clasificación