首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止多线程中的不良优化

防止多线程中的不良优化
EN

Stack Overflow用户
提问于 2013-08-23 13:30:19
回答 1查看 671关注 0票数 5

以下代码:

代码语言:javascript
复制
while (x == 1) { ... }

可能被优化为

代码语言:javascript
复制
while (true) { ... }

如果x只在另一个线程中分配。见说明C#中易失性关键字的用法。答案是通过将x设置为volatile来解决这个问题。

然而,根据这三位贡献者的说法,这似乎并不是正确的方法(综合声誉超过100万:)

Hans 可复制的易失性用法示例:“千万不要假设它在多线程场景中很有用。”

Marc Gravell 在多线程中,易失性变量的值不会改变。:“易失性不是我通常用来保证行为的语义”

Eric 原子性、波动性和不变性是不同的,第三部分。:“我不鼓励你做一个不稳定的领域。”

假设一个Backgroundworker像对待任何其他多线程一样(而不是有一些防止优化的内置机制),那么如何防止糟糕的优化呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-23 13:54:01

你有点曲解了我的立场。使字段易失性阻止优化。在C#中不破坏易失性。(C++,那是另一个故事。)

我的观点不是说波动不像预期的那样起作用。我的观点是,在两个不同的线程上读取和写入相同的变量首先是个坏主意,。如果你必须使用易失性使你的程序正确,考虑重新设计你的程序,使它根本不需要易失性。

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

https://stackoverflow.com/questions/18404118

复制
相关文章

相似问题

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