较低级别的 std::atomic<unsigned int>

A lower level of std::atomic<unsigned int>

本文关键字:unsigned gt int lt atomic std 较低级      更新时间:2023-10-16

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

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

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

因此,我宁愿使用std::uint32_t作为成员,并在库中对该成员应用原子操作。只有我不知道如何做到这一点,除了使用互斥锁,它会将性能降低到无法接受的程度。

总之,我该如何做类似的事情

std::int32_t foo;
atomic_increment(foo);

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

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

然而,在实践中,只需使用std::atomic——在一个真正支持原子的平台上,任何像样的编译器/库都不应该在机器代码中留下任何痕迹。

相关文章: