c++ - 原子读/写值的静态断言

标签 c++ templates gcc

有没有办法检查一个值的读/写(加载/存储)是否是原子的?我有专门版本的并发容器,只能使用这些值,我想添加一个静态断言以防止意外误用。

对于 x86_64 上的所有基本类型都是如此,但它可能不适用于所有平台或所有 long 数据类型。此外,小型结构和 union 也有可能被分配原子操作(因为它们只是被编译为使用相同大小的基本复制操作)。

最佳答案

C++0x 草案在 header 中有一个包含宏的部分,这表明没有简单且可移植的方法来检查它。

29.4 Lock-free property [atomics.lockfree]

#define ATOMIC_CHAR_LOCK_FREE implementation-defined 
#define ATOMIC_CHAR16_T_LOCK_FREE implementation-defined 
#define ATOMIC_CHAR32_T_LOCK_FREE implementation-defined 
#define ATOMIC_WCHAR_T_LOCK_FREE implementation-defined 
#define ATOMIC_SHORT_LOCK_FREE implementation-defined 
#define ATOMIC_INT_LOCK_FREE implementation-defined 
#define ATOMIC_LONG_LOCK_FREE implementation-defined 
#define ATOMIC_LLONG_LOCK_FREE implementation-defined

宏指示可以在没有锁的情况下实现 std::atomic 的类型,这意味着它们本身是原子的。

关于c++ - 原子读/写值的静态断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5536895/

相关文章:

c++ - 在这种情况下,是否有与 C++03 的 constexpr 类似的东西?

C++ 重载运算符返回派生类对象而不是基类

c - 适用于AVX512掩码寄存器(k1 ... k7)的GNU C内联asm输入约束?

c - 如何设置环境变量GUILE_WARN_DEPRECATED?

c++ - 如何遍历二维 vector

android - 将 Mat 转换为 Blob,然后再转换回 Mat

c++ - 偏特化语法困惑

c++ - 是否需要将 delete 用于在 vector 中创建的新数组?

Windows 7 SCardGetStatusChange 中的 C++ 源代码返回代码 6

c++ - 表达式中运算符的 GCC 和 ADL