Если структура данных содержит в себе несколько элементов, атомная версия не может (всегда) блокироваться. Мне сказали, что это справедливо для более крупных типов, потому что процессор не может атомизировать данные без использования какой-либо блокировки.
например:
#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;
}
выход (Linux/gcc):
0
16
16
Поскольку атом и foo
имеют одинаковый размер, я не думаю, что в атоме хранится блокировка.
Мой вопрос:
Если атомная переменная использует блокировку, где она хранится и что это означает для нескольких экземпляров этой переменной?