Насколько я понимаю, 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);
Чтобы доступ к регистрам устройства из разных потоков автоматически сериализовался.