首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >并发C++11 -可以使用哪些工具链?

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

Stack Overflow用户
提问于 2012-04-07 15:41:26
回答 2查看 855关注 0票数 8

我在代码中大量使用<thread> <atomic> <mutex>等,其中包括几个无锁算法。我的目标是(最终) linux环境。我一直在使用VisualStudio2011Beta进行开发,虽然它在其他C++11特性中非常缺乏,但它似乎是实现并发特性的唯一工具链。

请参见这里的c++ 11支持:

  • Clang 3+
  • GCC 4.7
  • MSVC 11

现在,如果其他人只是缺少一个包含c++11并发特性的库,那么我可以很容易地使用只是:线程,但是clang和gcc对c++11内存模型的回答是“不”,至少视觉c++似乎支持这个模型。我不太确定这会产生什么效果--可能是优化了明显的副作用--免费代码,以及其他错误的东西。

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

EN

回答 2

Stack Overflow用户

发布于 2012-04-08 09:05:07

GCC 4.7地位 C++内存模型工作正在进行中,计划在下一个GCC版本中完成。GCC 4.7现在已经被释放了,所以这就是你可以期待的。

  • 支持的无锁指令的完整原子实现。所有的原子操作都是用新的__atomic内置程序实现的,大多数目标都在生成的代码中反映内存模型参数。优化不会将共享内存操作移到原子操作之后,因此各种发生的关系将得到遵守。
  • 当没有无锁指令时(无论是通过硬件还是操作系统支持),原子操作将作为函数调用留给库来解决。由于时间限制和API还没有最终确定,GCC 4.7没有提供libatomic。这很容易通过遇到以_atomic*开头的不满意的外部符号来确定。
  • 如果程序需要库帮助,则可以编译单个C文件示例实现,并将其与客户端程序链接,以便使用锁定的实现解决这些外部函数调用。下载示例libatomic
  • C++模板完全支持任意大小的对象,尽管前面提到的libatomic.c文件可能需要满足某些用户定义的类。如果一个类映射到与支持的无锁积分类型相同的大小,那么也将使用无锁例程。
  • Bitfield与内存模型不兼容。也就是说,在读或写时,由于整个字的访问,它们可能会引入加载或存储数据竞赛。
  • 虽然已经做了一些工作,但是优化还没有被完全审核以符合要求。一些优化可能引入以前不存在的新的数据竞赛。已知案例的数量很小,对遵从性的测试也不是那么简单。如果有人遇到优化引入新的数据竞争的情况,请为其打开bugzilla案例,这样就可以解决它。

LLVM中的支持似乎更进一步:http://llvm.org/releases/3.0/docs/Atomics.html

不过,很难知道这在何种程度上被实际用于clang。<atomic>似乎基本上适用于某些类型。我得到了其他类型的编译器断言,表示原子类型是意外的,这给它所使用的类型提供了一点信心。

票数 4
EN

Stack Overflow用户

发布于 2012-04-07 18:36:37

我在64位linux和windows上成功地使用了gcc-4.7 .std::thread等在linux上工作得很好,即使是gcc-4.6。

在windows 4.7 (mingw64)上有一些小问题,内存泄漏与std::condition_variable AFAIR的析构函数有关.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10055820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档