两个问题:
1. 在下面的代码列表中,我应该更改什么,以便绝对需要使用volatile?
2. 如果C#编译器看到变量从不同的线程访问,它是否足够聪明,会将变量视为易失性?
以上引发了更多的问题:
a. volatile只是一个提示吗?
b. 在多线程上下文中,何时应将变量声明为volatile?
c. 对于线程安全类,所有成员变量都应该声明为volatile吗?那样是否过度?
代码清单(易失性而非线程安全是重点):
class Program
{
static void Main(string[] args)
{
VolatileDemo demo = new VolatileDemo();
demo.Start();
Console.WriteLine("Completed");
Console.Read();
}
}
public class VolatileDemo
{
public VolatileDemo()
{
}
public void Start()
{
var thread = new Thread(() =>
{
Thread.Sleep(5000);
stop = true;
});
thread.Start();
while (stop == false)
Console.WriteLine("Waiting For Stop Event");
}
private bool stop = false;
}
谢谢。