c#中的volatile关键字用途是什么?
发布时间:2020-12-15 06:18:57 所属栏目:百科 来源:网络整理
导读:我想看看在c#中实时使用Volatile关键字.但我无法投射最好的例子.下面的示例代码在没有Volatile关键字的情况下工作怎么可能? class Program{ private static int a = 0,b = 0; static void Main(string[] args) { Thread t1 = new Thread(Method1); Thread t
我想看看在c#中实时使用Volatile关键字.但我无法投射最好的例子.下面的示例代码在没有Volatile关键字的情况下工作怎么可能?
class Program { private static int a = 0,b = 0; static void Main(string[] args) { Thread t1 = new Thread(Method1); Thread t2 = new Thread(Method2); t1.Start(); t2.Start(); Console.ReadLine(); } static void Method1() { a = 5; b = 1; } static void Method2() { if (b == 1) Console.WriteLine(a); } } 在上面的代码中,我得到一个值为5.如何在不使用volatile关键字的情况下工作? 解决方法
volatile关键字告诉编译器变量可以随时更改,因此它不应该优化读取和写入变量.
考虑这样的代码: int sum; for (var i = 0; i < 1000; i++) { sum += x * i; } 由于变量x在循环内部没有变化,编译器可能会在循环外部读取变量,并在整个循环中使用相同的值. 如果将变量x设为volatile,则编译器将在每次使用变量时读取变量的值,因此如果更改其他线程中的值,则将立即使用新值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- C Windows函数调用,获取本地主机名和IP地址
- Xcode 9 – 可下载的xip文件在Apple网站上已损坏
- flash – ActionScript 3 Profiler和内存分析工具
- 如何在Swift iOS 8中使用requestAccessToEntityType方法
- AS3学习笔记(三)XML解析
- postgresql数据库常用命令(2)
- ruby-on-rails – 如何构建任务’elasticsearch:import:m
- Oracle光速入门系列一 ——韩顺平Oracle讲义笔记
- 【转】Unity3D结合XML载入和保存数据
- ruby-on-rails – 随机慢Rack :: MethodOverride#调用在Her
推荐文章
站长推荐
- 如何最有效地测试两个数组是否包含C#中的等效项
- c# – Make Contract.Assert抛出异常而不是显示对
- ruby-on-rails-3 – Rails ActiveAdmin – 在实用
- Swift 2.0学习笔记(Day 17)——Swift中数组集合
- react-router – 在navitem中的React-Bootstrap链
- xcode – 在iOS上升级到PhoneGap 2.0后,JSONKit.
- 判断字符串是JSONObject还是JSONArray
- Day13持久化存储——SQLite数据库存储(使用cont
- c# – 在WPF中,如何引用在不同XAML文件中定义的静
- [Oracle]理解undo表空间
热点阅读