较低级别的std :: atomic <unsigned int =“”> </unsigned>

时间:2014-10-02 11:27:11

标签: c++ c++11 atomicity

我有一个struct,由我在两个动态链接库(或共享对象)之间共享的普通旧数据组成。 (用C ++ 11编译)。

其中一个数据成员必须是原子类型,或者更准确地说,我需要能够以原子方式将前缀++--应用于原型。

我担心会员使用std::atomic<unsigned int>,因为我认为这会将两个库绑定到使用相同的STL实现。

所以我宁愿使用std::uint32_t作为成员,并将原子操作应用于库中的该成员。只有我无法弄清楚如何做到这一点,除了使用会使性能降低到不可接受程度的互斥量。

总结如何做一些像

这样的事情
std::int32_t foo;
atomic_increment(foo);

使用标准C ++ 11提供的功能?

1 个答案:

答案 0 :(得分:1)

你做不到。标准C ++不尊重不同共享库中不同库实现的想法(因为它没有后者的概念),因此不考虑您的情况存在。因此,没有任何设施可以支持它。

但实际上,只需使用std::atomic - 在实际支持原子的平台上任何体面的编译器/库都不应在机器代码中留下任何痕迹。