关键字volatile 的使用

jmu_xiaocai 2009-03-12 02:20:37
网上搜索很多,但是都是讲理论的部分
对这个还不是很了解,那位懂的写个例子讲解一下 谢谢
...全文
199 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingfengbannixing 2011-11-24
  • 打赏
  • 举报
回复
volatile修饰符表示所声明的字段可以被多个并发执行的线程修改。如果某个字段声明包含volatile关键字,则该字段将不再被编译器优化。这样可以确保该字段在任何时间呈现的都是最新的值。
对于由多个线程访问的字段,而且该字段没有用lock语句对访问进行序列化,声明字段时应该使用volatile修饰符。
volatile修饰符只能包含在类或结构的字段声明中,不能将局部变量声明为volatile。
在布尔型字段的声明中,添加volatile修饰符的方法如下:
public volatile bool shouldStop;
sjt000 2009-03-13
  • 打赏
  • 举报
回复

public class Singleton
{
private static volatile Singleton instance;
private static object lockHelper=new Object();

private Singleton(){}

public static Singleton Instance
{
get
{
if(instance==null)
{
lock(lockHelper)
{
if(instance==null)
{
instance=new Singleton();
}
}
}
return Instance;
}
}
}
sjt000 2009-03-13
  • 打赏
  • 举报
回复
1:volatile 关键字指示一个字段可以由多个同时执行的线程修改。
2:声明为 volatile 的字段不受编译器优化的限制,也就是说严格按照你的代码运行。

btw:引用类型也是可以用的。
例如在Singleton模式的一种实现在,就要用volatile关键字来防止编译器对代码进行优化,否则不能严格保证Singleton模式的实现。
jmu_xiaocai 2009-03-12
  • 打赏
  • 举报
回复
有列子吗/
fancystyle 2009-03-12
  • 打赏
  • 举报
回复
这个关键字用法其实很简单.
设计时某个字段在多线程经常要访问它修改它时,就可以用这个关键字.编译器会优化这个字段的
主要是用在.NET内置值类型上,比如int,bool.引用类型应该是不可以用的.

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧