をマルチスレッド:CPUのキャッシュ口座にCPUのキャッシュとすべての可能なコンパイラの最適化を取る行動
- がコンソールに書き込まれることを「false」のため、それは可能ですか?
- オプション1は、オブジェクト参照とフィールドのフレッシュさを保証するメモリフェンスを設定していますか?
オプション2はオプション1よりも安全性が低いですか?当然の
class Program { class Test { internal bool value = false; } static void Main(string[] args) { Test test = new Test(); //Option 1 ThreadPool.QueueUserWorkItem((s) => { Thread.Sleep(1000); Console.WriteLine(((Test)s).value); }, test); //Option 2 ThreadPool.QueueUserWorkItem((s) => { Thread.Sleep(1000); Console.WriteLine(test.value); }); test.value = true; Console.ReadLine(); } }
をコード。あなたのマシン**上でスレッド**を開始することは100ミリ秒以下になるので、オプション#1とオプション#2のロックステートメントはメインスレッドのロックステートメントの前に置かれます。 –