【发布时间】:2012-04-20 19:11:30
【问题描述】:
我在我的代码中大量使用<thread> <atomic> <mutex> 等,其中包括几个无锁算法。我的目标是(最终)一个 linux 环境。我一直在使用 Visual Studio 2011 Beta 进行开发,虽然它在其他 C++11 功能中非常缺乏,但似乎是唯一实现并发功能的工具链。
在此处查看 c++ 11 支持:
现在,如果其他人只是缺少包含 c++ 11 并发特性的库,我可以轻松使用 just::thread,但是 clang 和 gcc 都对 c++11 内存模型回答“否”,至少视觉 c++ 似乎支持。我不确定这会产生什么影响 - 可能会优化明显无副作用的代码,以及其他错误。
如果现在我完全避免优化构建并且只编译调试构建而不启用优化 - 使用 Clang 或 GCC 工具链是否合理?
【问题讨论】:
-
我的直接猜测是,如果您使用
just::thread,它会正常工作。它使用本机(Posix 或 Win32)原语来强制执行诸如排序之类的事情,所以我认为编译器通常必须被严重破坏才能失败。 -
你可能应该在你的列表中包含一个多线程相关的标签,Anthony Williams 经常出现在这里,所以如果你足够幸运他会注意到的。我认为他创建了
just::thread以便它是跨平台的,所以我预计不会有任何问题。
标签: c++ multithreading synchronization c++11 lock-free