Onde está o bloqueio para um std :: atomic?

Se uma estrutura de dados possui vários elementos, sua versão atômica não pode (sempre) ser livre de bloqueios. Disseram-me que isso é verdade para tipos maiores porque a CPU não pode alterar atomicamente os dados sem usar algum tipo de bloqueio.

por exemplo:

#include <iostream>
#include <atomic>

struct foo {
    double a;
    double b;
};

std::atomic<foo> var;

int main()
{
    std::cout << var.is_lock_free() << std::endl;
    std::cout << sizeof(foo) << std::endl;
    std::cout << sizeof(var) << std::endl;
}

a saída (Linux / gcc) é:

0
16
16

Desde o atômico efoo são do mesmo tamanho, não acho que um cadeado esteja armazenado no atômico.

Minha pergunta é:
Se uma variável atômica usa um bloqueio, onde é armazenada e o que isso significa para várias instâncias dessa variável?

questionAnswers(3)

yourAnswerToTheQuestion