【问题标题】:How to use std::atomic or boost::atomic with the classic compiler?如何在经典编译器中使用 std::atomic 或 boost::atomic?
【发布时间】:2017-01-17 19:58:42
【问题描述】:

我目前正在使用 C++ Builder 10.1.2 开发一个中型项目,不幸的是,我与 BCC32 classic 编译器相关联(主要是出于可靠性和速度的原因)。

对于一些后台解析,如果我可以使用C++11std::atomic 会很好,但是classic 编译器无法做到这一点。连boost::atomic都不可用,因为BCC32只能安装boost V.1.39,没有内置boost::atomic

所以...

  • 是否有可能将较新的 boost 版本与 classic 编译器一起使用?

  • 是否有一些替代... ::atomic(互斥体包装的普通变量除外)?

【问题讨论】:

  • 为什么你认为一个 11 岁的编译器会比现在的编译器更可靠、更快?
  • 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题与 Stack 无关溢出
  • @Captain 我不认为 OP 要求图书馆推荐。是什么让你这么想?
  • @Rakete1111 ...alternatives to... 对我来说似乎很明显在“库或工具”下。
  • @Mark OP 包括了一个替代方案(多文本包装的普通变量),所以我认为 OP 不想要库,而是复制 std::atomic

标签: c++ c++builder


【解决方案1】:

您可以自己实现无锁std::atomic,前提是您可以访问程序集。只需为您的 CPU 找出相应的组装说明并对其进行编码。执行此操作的简单方法是使用 CPU 上的现代编译器使用 std::atomic 编译一些测试代码,并查看生成的 ASM。当然,这将取决于 CPU,并且您将使用可移植性。

如果您的编译器不允许您使用 ASM,或者您不想将自己与特定的 CPU 结合,您可以依赖操作系统提供的 API - *nix 和 Windows 都有一系列原子函数。

【讨论】:

    猜你喜欢
    • 2012-03-22
    • 2015-08-25
    • 2015-06-04
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多