Так что это очень конкретный вопрос:Является ли эта тема безопасной? (общие данные без мьютекса/семафора)
Я использую встроенную систему с одним ядром процессора.
У меня есть один основной поток и прерывание. Они имеют 32-битный флоат. Прерывание записывает float, и основной поток читает его. Считывание и запись не синхронизированы.
В документации к процессору указано, что 32-разрядное считывание является однотактной.
Могу ли я в своей оценке, что нет риска, что основной поток будет читать поврежденное значение? Или есть другие факторы?
Имеет ли значение, является ли запись двумя циклами? –
И чтение, и запись должны быть атомарными, чтобы это работало. Если это так, вам хорошо идти. Если есть проблема с этим, вы можете найти некоторую операцию памяти, где чтение и запись являются как атомарными, так и байтами. Тогда вы можете использовать это как семафор, чтобы ограничить доступ чтения/записи к float. –
Кроме того, всегда ли верно, что однотактные операции являются атомарными на одиночных ядрах? В документации явно указано, что test_and_set является атомарным. –