c – 在VS2012中使用’volatile’关键字的最佳实践

前端之家收集整理的这篇文章主要介绍了c – 在VS2012中使用’volatile’关键字的最佳实践前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
自从我们的开发和构建环境从VS2008升级到VS2012以来,我对在我们的遗留代码库中使用volatile关键字的含义感到困惑(它非常广泛,因为从“旧”时代管理线程有很多复制模式).

Microsoft在VS2012文档中有以下评论

If you are familiar with the C# volatile keyword,or familiar with the behavior of volatile in earlier versions of Visual C++,be aware that the C++11 ISO Standard volatile keyword is different and is supported in Visual Studio when the /volatile:iso compiler option is specified. (For ARM,it’s specified by default). The volatile keyword in C++11 ISO Standard code is to be used only for hardware access; do not use it for inter-thread communication. For inter-thread communication,use mechanisms such as std::atomic<T> from the C++ Standard Template Library.

它继续说:

When the /volatile:ms compiler option is used—by default when architectures other than ARM are targeted—the compiler generates extra code to maintain ordering among references to volatile objects in addition to maintaining ordering to references to other global objects.

我认为这意味着我们现有的代码不会破坏,但不一定是可移植的(对我们来说不是问题).

但是,如果可能的话,它确实提出了这些问题,我希望得到一些建议:

>我们是否应该在我们的代码删除volatile限定符的使用并替换为符合C 11 ISO标准的等价物,即使我们不会将代码从MS中移除?
>如果我们不这样做,是否有任何缺点?

我理解这不是一个特定的编程问题,但我们正在进行一些非常重要的重构,我希望能够为这项工作提供一些明智的指导.

解决方法

>如果你有时间的话.好处并不是那么好 – C 11原子可能允许更精确地控制您需要的确切类型的同步,并且具有更明确定义的语义,这可以允许编译器更好地优化代码. >理论上,但非常不太可能,未来版本的编译器可能会完全放弃对MS样式volatile的支持.或者有一天你实际上想要远离MS编译器,即使你留在Windows上也是如此.如果您现在正在进行重构,那么这可能是用原子替换挥发物的工作的好时机,从而使您无法在将来进行工作.
原文链接:https://www.f2er.com/c/119145.html

猜你在找的C&C++相关文章