Атомарные операции:
Атомарные операции относятся к операциям, которые не могут быть далее разделены.Как правило, атомарные операции используются для переменных или битовых операций.
использовать атомарные операции для
Реализуйте взаимоисключающий доступ к
светодиодному
устройству, то есть только одно приложение может использовать
светодиодный
свет одновременно.
В инициализации модуля
функция инициализации:
/* Инициализировать атомарные переменные */
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);