Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;std::用于用户定义数据类型的原子_C++_Multithreading_C++11_Atomic - Fatal编程技术网

C++ C++;std::用于用户定义数据类型的原子

C++ C++;std::用于用户定义数据类型的原子,c++,multithreading,c++11,atomic,C++,Multithreading,C++11,Atomic,我无法理解并编写与以下用户定义数据类型的原子库功能相关的代码: 标准::原子::比较交换弱, 标准::原子::比较交换强 所以,如果我有下面这个平凡的类,我如何在这个平凡的类上使用compare\u exchange\u弱/compare\u exchange\u强原子库方法呢 class A { public: void Show() { std::cout << "Called\n"; } }; A类 { 公众: 无效

我无法理解并编写与以下用户定义数据类型的原子库功能相关的代码:

标准::原子::比较交换弱, 标准::原子::比较交换强

所以,如果我有下面这个平凡的类,我如何在这个平凡的类上使用compare\u exchange\u弱/compare\u exchange\u强原子库方法呢

class A
{
public:
    void Show()
    {
        std::cout << "Called\n";
    }
};
A类
{
公众:
无效显示()
{

std::cout您的类没有数据,因此不需要使用
std::atomic
。如果您想知道如何将
std::atomic
与UDT一起使用,可以添加成员数据,然后使用以下代码

#include <iostream>
#include <atomic>

class A
{
public:
    int a;
    void Show()
    {
        std::cout << a << "\n";
    }
};

int main( ) {
    A a1{1};
    A a2{2};
    std::atomic<A> atomicA{a1};
    atomicA.load().Show();//the original atomicA
    atomicA.compare_exchange_strong(a2, A{2});// this makes no change
    atomicA.load().Show();
    atomicA.compare_exchange_strong(a1, A{2});//this changes atomicA
    atomicA.load().Show();

}

#包括
#包括
甲级
{
公众:
INTA;
无效显示()
{

std::cout有什么理由要使用这两种方法吗?你可以使用
std::atomic
,而不使用这两种方法。我觉得有点困惑,你首先选择方法并询问如何使用它们,而不是说你想用原子做什么(然后看看你是否可以使用这两种方法)…而且
A
没有数据,没有成员,它唯一的方法不需要同步。不需要对
进行原子化处理。给定类A的
对象只有一个字节的填充,程序员无法使用。compare\u exchange函数只比较填充的位。启动learni感觉毫无意义类似这样的东西,最好找一本这样的书,实际上我想知道用户定义的数据类型的compare\u exchange\u strong与之比较-在这种情况下,它将调用哪个a的方法?谢谢,但是compare\u exchange\u strong与什么比较-它将调用哪个a的方法?@程序员它比较ob的位表示直到c++20。并将比较值rep.using==自c++20以来定义的运算符。顺便问一下,a1{1};在没有接受整数的构造函数时意味着什么?我尝试了a1;std::atomic atm{a1};但它给出了以下错误:错误C4700未初始化的局部变量“a1”使用了原子Operations@Programmer
#include <iostream>
#include <atomic>

class A
{
public:
    int a;
    void Show()
    {
        std::cout << a << "\n";
    }
};

int main( ) {
    A a1{1};
    A a2{2};
    std::atomic<A> atomicA{a1};
    atomicA.load().Show();//the original atomicA
    atomicA.compare_exchange_strong(a2, A{2});// this makes no change
    atomicA.load().Show();
    atomicA.compare_exchange_strong(a1, A{2});//this changes atomicA
    atomicA.load().Show();

}