相关疑难解决方法(0)

std :: atomic的锁在哪里?

如果数据结构中包含多个元素,则它的原子版本不能(始终)无锁.我被告知这对于较大的类型是正确的,因为CPU不能在不使用某种锁的情况下以原子方式更改数据.

例如:

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出(Linux/gcc)是:

0
16
16
Run Code Online (Sandbox Code Playgroud)

由于原子和foo大小相同,我不认为锁存储在原子中.

我的问题是:
如果一个原子变量使用一个锁,它存储在哪里,这对该变量的多个实例意味着什么?

c++ x86 atomic c++11 stdatomic

67
推荐指数
3
解决办法
4729
查看次数

标签 统计

atomic ×1

c++ ×1

c++11 ×1

stdatomic ×1

x86 ×1