C#多线程同步问题---使用interlocked类

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Threading;
   6: using System.Threading.Tasks;
   7:  
   8: namespace SynchronizationSamples
   9: {
  10:     public class SharedState
  11:     {
  12:         private int state = 0;
  13:         private object syncRoot = new object();
  14:         public int State 
  15:         { 
  16:             get{return state;}
  17:             set { state = value; }
  18:         }
  19:  
  20:         public int IncrementState()
  21:         {
  22:             return Interlocked.Increment(ref state);
  23:  
  24:         }
  25:     }
  26:  
  27:     public class Job
  28:     {
  29:         SharedState sharedState;
  30:         public Job(SharedState sharedState)
  31:         {
  32:             this.sharedState = sharedState;
  33:         }
  34:  
  35:         public void DoTheJob()
  36:         {
  37:             for (int i = 0; i < 50000;i++ )
  38:             {
  39:                sharedState.IncrementState();
  40:             }
  41:         }
  42:     }
  43:     class Program
  44:     {
  45:         static void Main(string[] args)
  46:         {
  47:             int numTasks = 20;
  48:             var state = new SharedState();
  49:             var tasks = new Task[numTasks];
  50:  
  51:             for (int i = 0; i < numTasks; i++)
  52:             {
  53:                 tasks[i] = new Task(new Job(state).DoTheJob);
  54:                 tasks[i].Start();
  55:             }
  56:  
  57:             for (int i = 0; i < numTasks;i++ )
  58:             {
  59:                 tasks[i].Wait();
  60:             }
  61:             Console.WriteLine("summarized {0}",state.State);
  62:             Console.Read();
  63:         }
  64:     }
  65: }

你可能感兴趣的:(Lock)