最佳答案
If a data structure has multiple elements in it, the atomic version of it cannot (always) be lock-free. I was told that this is true for larger types because the CPU can not atomically change the data without using some sort of lock.
for example:
#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;
}
the output (Linux/gcc) is:
0
16
16
Since the atomic and foo
are the same size, I don't think a lock is stored in the atomic.
My question is:
If an atomic variable uses a lock, where is it stored and what does that mean for multiple instances of that variable ?