相关疑难解决方法(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
查看次数

为什么sizeof(std :: mutex)== 40(gcc,clang,icc)?

而不是sizeof(std::atomic<bool>)==1

一个互斥体可以通过一个简单的实现std::atomic<bool>,所以我认为互斥体的大小可以小到那个,或者可能是4(32位).

c++ mutex c++11

6
推荐指数
3
解决办法
3243
查看次数

标签 统计

c++ ×2

c++11 ×2

atomic ×1

mutex ×1

stdatomic ×1

x86 ×1