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?