C++ 我们可以对用户自定义数据类型使用哪些原子操作
C++ What atomic operations we can use on trival user defined data type
我正在尝试理解 std::atomic 类型和原子操作。下面是我的代码:
#include <atomic>
#include <iostream>
class A
{
public:
int x;
void Show() {}
};
int main()
{
std::atomic<A> fooA;
// fooA.Show(); -- gives me std::atomic<A> has no member Show()
}
定义用户类型时我们可以执行哪些原子操作 - 如 Mtype.load() 等 - 我们如何将 Mtype 与 load() 原子操作一起使用 - 其中 load 原子地获取值原子对象?
原子操作只有在您可以对给定数据类型执行 compare-and-swap 交换时才有意义。这意味着数据必须是“可简单复制的”。
对于大于整数类型的任何东西,最好使用互斥锁来保护可从多个线程访问的结构元素 - “共享可变状态”。
有关详细信息,请参阅此 post:How to use std::atomic<> effectively for non-primitive types?
我正在尝试理解 std::atomic 类型和原子操作。下面是我的代码:
#include <atomic>
#include <iostream>
class A
{
public:
int x;
void Show() {}
};
int main()
{
std::atomic<A> fooA;
// fooA.Show(); -- gives me std::atomic<A> has no member Show()
}
定义用户类型时我们可以执行哪些原子操作 - 如 Mtype.load() 等 - 我们如何将 Mtype 与 load() 原子操作一起使用 - 其中 load 原子地获取值原子对象?
原子操作只有在您可以对给定数据类型执行 compare-and-swap 交换时才有意义。这意味着数据必须是“可简单复制的”。
对于大于整数类型的任何东西,最好使用互斥锁来保护可从多个线程访问的结构元素 - “共享可变状态”。
有关详细信息,请参阅此 post:How to use std::atomic<> effectively for non-primitive types?