Во встроенной (ARM) среде без ОС, если я использую прерывания, есть ли вероятность тупиковой ситуации при использовании std::atomic<T>
?Если так, то как?
Как правило, в любой момент управление может быть прервано для обработки прерывания.В частности, если кто-то наивно должен иметь мьютекс и хочет использовать его для «безопасной» переменной, он может заблокировать, записать и разблокировать, а затем заблокировать, прочитать и разблокировать в другом месте.Но если чтение выполняется в режиме прерывания, вы можете заблокировать, прервать, заблокировать => взаимоблокировку.
В частности, у меня есть std::atomic<int>
, для которого is_always_lock_free
равно false
.Стоит ли беспокоиться по поводу тупиковой ситуации?Когда я смотрю на сгенерированную сборку, запись 42
выглядит следующим образом:
bl __sync_synchronize
mov r3, #42
str r3, [sp, #4]
bl __sync_synchronize
, которая, кажется, не блокируется.ASM для чтения значения аналогичен.Является ли (возможной) блокировка для более сложных операций, например, exchange
?