我分配了4096字节的共享内存。如何将其视为std::atomic<uint64_t>
个对象的数组?
最终目标是将64位变量数组放到共享内存中,并对这些变量执行__sync_fetch_and_add
(GCC内置)。但我更喜欢使用原生C ++ 11代码而不是使用GCC内置函数。那么如何将分配的内存用作std :: atomic对象?我应该在512个柜台上调用placement new
吗?如果std::atomic
的构造函数在某些imeplement中需要额外的内存分配,该怎么办?我应该考虑在共享内存中对齐std::atomic
对象吗?
答案 0 :(得分:0)
对于C ++ 20,如果可以确保对象正确对齐,则可以使用std::atomic_ref。对于C ++ 17和任何更旧的版本,boost :: atomic_ref可能也可以工作,尽管我尚未对其进行测试。
如果您不想使用Boost,那么编译器内置函数是剩下的唯一解决方案。在这种情况下,您应该更喜欢__atomic
内置函数,而不是旧的__sync
函数,如on the GCC documentation page for atomics所述。