Как использовать std :: atomi c для регистров с фиксированным адресом - PullRequest
1 голос
/ 27 мая 2020

Насколько я понимаю, std::atomic<uint32_t> foo создаст для меня переменную atomi c, но фактическое расположение в памяти будет определяться компоновщиком. С другой стороны, std::atomic<uint32_t*> bar создаст указатель atomi c, т.е. защищен сам указатель, но не цель, на которую он указывает.

Мне было интересно, можно ли также создать atomi c переменная, защищающая известный адрес памяти (например, регистр устройства). Что-то вроде

uint32_t register_addr = 0xdeadbeef;
std::atomic<uint32_t> register(register_addr);

Чтобы доступ к регистрам устройства из разных потоков автоматически сериализовался.

...