我有一个struct
,由我在两个动态链接库(或共享对象)之间共享的普通旧数据组成。 (用C ++ 11编译)。
其中一个数据成员必须是原子类型,或者更准确地说,我需要能够以原子方式将前缀++
和--
应用于原型。
我担心会员使用std::atomic<unsigned int>
,因为我认为这会将两个库绑定到使用相同的STL实现。
所以我宁愿使用std::uint32_t
作为成员,并将原子操作应用于库中的该成员。只有我无法弄清楚如何做到这一点,除了使用会使性能降低到不可接受程度的互斥量。
总结如何做一些像
这样的事情std::int32_t foo;
atomic_increment(foo);
使用标准C ++ 11提供的功能?
答案 0 :(得分:1)
你做不到。标准C ++不尊重不同共享库中不同库实现的想法(因为它没有后者的概念),因此不考虑您的情况存在。因此,没有任何设施可以支持它。
但实际上,只需使用std::atomic
- 在实际支持原子的平台上任何体面的编译器/库都不应在机器代码中留下任何痕迹。