예제 #1
0
 private static void AccessFalseSharingData(FalseSharingData data, int field, int iterations)
 {
     for (int x = 0; x < iterations; x++)
     {
         if (field == 0)
         {
             data.field1++;
         }
         else
         {
             data.field2++;
         }
     }
 }
예제 #2
0
        private static void Main(string[] args)
        {
            int iterations = 100000000;

            var badData   = new FalseSharingData();
            var stopwatch = Stopwatch.StartNew();
            var t1        = Task.Factory.StartNew(() => AccessFalseSharingData(badData, 0, iterations));
            var t2        = Task.Factory.StartNew(() => AccessFalseSharingData(badData, 1, iterations));

            Task.WaitAll(t1, t2);
            Console.WriteLine("BadData  Access Time: {0} ms", stopwatch.ElapsedMilliseconds);

            var goodData = new GoodData();

            stopwatch.Restart();
            t1 = Task.Factory.StartNew(() => AccessGoodData(goodData, 0, iterations));
            t2 = Task.Factory.StartNew(() => AccessGoodData(goodData, 1, iterations));
            Task.WaitAll(t1, t2);
            Console.WriteLine("GoodData Access Time: {0} ms", stopwatch.ElapsedMilliseconds);

            Console.ReadLine();
        }