2014-10-02 96 views
0

我有一个struct,它由在两个动态链接库(或共享对象)之间共享的普通旧数据组成。 (用C++ 11编译)。较低级别的std :: atomic <unsigned int>

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

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

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

总之我怎么可以这样做可以使用通过标准C++ 11功能

std::int32_t foo; 
atomic_increment(foo); 

+3

你的问题是如何解决某些问题,当你不能依赖C++标准,并且你想要一个C++标准的答案。这没有意义。 – 2014-10-02 11:29:08

+0

为什么不使用std :: atomic在共享库中实现它,并导出一个stl-independant接口? – galinette 2014-10-02 11:35:07

回答

1

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

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

相关问题