我目前正在使用C ++ Builder 10.1.2中的一个中型项目,我很遗憾地将其绑定到BCC32 经典编译器(主要是出于可靠性和速度原因)。
对于某些后台解析,如果我可以使用 C ++ 11 的std::atomic
会很好,但经典编译器不能那。即使boost::atomic
也不可用,因为只能为BCC32安装 boost V.1.39,它没有内置boost::atomic
。
因此...
是否有可能在经典编译器中使用较新的 boost 版本?
是否有... ::atomic
的替代方法(除了互斥锁包装的普通变量)?
答案 0 :(得分:1)
如果您有权访问程序集,则可以自己实现无锁std::atomic
。只需找出CPU的相应汇编指令并对其进行编码。这样做的简单方法是使用CPU上的现代编译器使用std::atomic
编译一些测试代码,并查看生成的ASM。当然,它将取决于CPU,您将使用可移植性。
如果您的编译器不允许您使用ASM或者您不想将自己与特定CPU结合,则可以依赖OS提供的API - * nix和Windows都具有原子功能系列。