今天突然理解了“volatile”
首先咱们可以看一下MSDN对volatile的定义:
The volatile keyword indicates that a field can be modified in the program by something such as the operating system, the hardware, or a concurrently executing thread.
The system always reads the current value of a volatile object at the point it is requested, even if the previous instruction asked for a value from the same object. Also, the value of the object is written immediately on assignment.
The volatile modifier is usually used for a field that is accessed by multiple threads without using the lock statement to serialize access. Using the volatile modifier ensures that one thread retrieves the most up-to-date value written by another thread.
然后呢,咱们可以看到在Singleton模式中对多线程的优化
using System;2
using System.Configuration;3

4
namespace HeadFirstDesignPatterns.Singleton.InterestRate5
{6
/// <summary>7
/// Summary description for RateSingleton.8
/// </summary>9
public class RateSingleton10
{11
private volatile static RateSingleton uniqueInstance;12
private static object syncRoot = new Object();13

14
private double currentRate = 15
Convert.ToDouble(ConfigurationSettings.AppSettings["CurrentInterestRate"]);16

17
public double CurrentRate18
{19
get20
{21
return currentRate;22
}23
set24
{25
currentRate = value;26
}27
}28

29
private RateSingleton()30
{}31

32
public static RateSingleton GetInstance()33
{34
//The approach below ensures that only one instance is created and only 35
//when the instance is needed. Also, the uniqueInstance variable is 36
//declared to be volatile to ensure that assignment to the instance variable 37
//completes before the instance variable can be accessed. Lastly, 38
//this approach uses a syncRoot instance to lock on, rather than 39
//locking on the type itself, to avoid deadlocks.40

41
if(uniqueInstance == null)42
{43
lock (syncRoot)44
{45
if(uniqueInstance == null)46
{47
uniqueInstance = new RateSingleton();48
}49
}50
}51
return uniqueInstance;52
}53
}54
}55



浙公网安备 33010602011771号