//编译器在优化代码时,可能会把经常用到的代码存在Cache里面,然后下一次调用就直接读取Cache而不是内存, //这样就大大提高了效率。但是问题也随之而来了。 //在多线程程序中,如果把一个变量放入Cache后,又有其他线程改变了变量的值,那么本线程是无法知道这个变化的。 //它可能会直接读Cache里的数据。但是很不幸,Cache里的数据已经过期了,读出来的是不合时宜的脏数据。这时就会出现bug。 //用Volatile声明变量可以解决这个问题。用Volatile声明的变量就相当于告诉编译器,我不要把这个变量写Cache, //因为这个变量是可能发生改变的。 void Start() { WorkClass workC = new WorkClass(); Thread workThread = new Thread(workC.DoWork); workThread.Start(); Debug.Log("Main Thread: worker thread start"); while (!workThread.IsAlive) { ; //IsAlive,如果线程已启动且未终止返回true } Thread.Sleep(1); workC.RequestStop(); workThread.Join(); Debug.Log("Main Thread: worker thread stop"); }