C++ 并发C++;11-可以使用哪些工具链?

C++ 并发C++;11-可以使用哪些工具链?,c++,multithreading,synchronization,c++11,lock-free,C++,Multithreading,Synchronization,C++11,Lock Free,我使用 现在,如果其他人只缺少一个包含C++ 11并发特征的库,我可以很容易地使用,但是CLAN和GCC都对C++ 11内存模型回答“不”,至少Visual C++似乎支持。我不确定这会产生什么样的影响——可能会优化掉明显没有副作用的代码,以及其他错误的东西 如果现在我完全避免优化版本,只编译未启用优化的调试版本-使用Clang或GCC工具链合理吗?我在64位linux和windows上成功使用了GCC-4.7标准::线程等在linux上运行非常完美,即使使用gcc-4.6。 在windo

我使用

  • 现在,如果其他人只缺少一个包含C++ 11并发特征的库,我可以很容易地使用,但是CLAN和GCC都对C++ 11内存模型回答“不”,至少Visual C++似乎支持。我不确定这会产生什么样的影响——可能会优化掉明显没有副作用的代码,以及其他错误的东西


    如果现在我完全避免优化版本,只编译未启用优化的调试版本-使用Clang或GCC工具链合理吗?

    我在64位linux和windows上成功使用了GCC-4.7<代码>标准::线程
    等在linux上运行非常完美,即使使用gcc-4.6。
    在windows gcc-4.7(mingw64)上有一些小问题,内存泄漏与
    std::condition_variable
    AFAIR的析构函数有关

    C++内存模型工作正在进行中,计划在 下一个GCC版本。GCC4.7现在已经发布,所以这就是您想要的 我们可以从中期待

    • 支持的无锁指令的完整原子实现。所有的原子操作都是用新的_原子来实现的 内置和大多数目标反映了 生成的代码。优化不会移动共享内存 操作超过了原子操作,因此各种操作都会发生 人际关系是值得尊重的
    • 当无锁指令不可用时(通过硬件或操作系统支持),原子操作将作为函数调用保留 由图书馆解决。由于时间限制和API 未最终确定,GCC 4.7中未提供libatomic。这是 容易通过遇到不满意的外部符号来确定 从_原子*开始
    • 如果程序需要库帮助,可以编译单个C文件示例实现,并与 客户端程序使用锁定的 实施下载示例libatomic
    • C++模板完全支持任意大小的对象,尽管前面提到的libatomic.C文件可能需要满足某些要求 用户定义的类。如果类映射到与支持的类相同的大小 无锁整数类型,则也将使用无锁例程
    • 位字段不符合内存模型。也就是说,由于全世界的原因,他们可能会引入加载或存储数据竞争 读或写时访问
    • 虽然已经做了一些工作,但优化的合规性尚未得到全面审核。某些优化可能会引入新数据 以前没有出现过的种族。已知病例数为 很小,而且合规性测试也不是微不足道的。如果有人遇到 如果优化引入了新的数据竞争,请打开 bugzilla为它提供了一个案例,因此它可以被解决

    LLVM中的支持似乎更进一步:


    很难说它在叮当声中的实际使用程度。似乎
    基本上适用于某些类型。我得到了其他类型的编译器断言,说原子类型是意外的,这为它所处理的类型提供了一点信心。

    我的直接猜测是,如果您使用
    just::thread
    ,它会工作得很好。它使用本机(Posix或Win32)原语来强制执行排序之类的操作,因此我认为编译器通常必须严重损坏才能失败。安东尼·威廉姆斯(Anthony Williams)经常出现在这里,因此如果你够幸运的话,他会注意到你的列表中可能应该包含一个多线程相关标记。我认为他创建了
    just::thread
    ,这样就可以跨平台了,所以我不希望出现任何问题。这看起来很有希望。我实际上倾向于CLAN,因为它似乎产生了更多有用的错误信息——这是我与C++的一个相当大的时间同步。有一个实验性的QtCreator,它使用clang实现代码模型(完成、突出显示、重构等),我将尝试一下,因为我非常想念linux上的visual studio+visual assist x。