1.代码实例:


public class ThreadTest4 {     public static void Init()     {         //多个线程修改同一个值,使用lock锁解决并发         for (int i = 0; i < 4; i++)         {             Task.Factory.StartNew(ThreadMethod);         }     }     public static int Number = 1;     public static void ThreadMethod()     {         while (true)         {             lock (typeof(ThreadTest4))             {                 Number++;                 Console.WriteLine("当前线程:{0},Number={1}", Thread.CurrentThread.ManagedThreadId, Number);                 Thread.Sleep(500);             }         }     } }


使用lock锁前后结果对比:

使用Lock锁前,多线程修改同一数据会出现相同结果,

使用Lock锁后,修改数据保证了数据的在多个线程操作时的同步。

C#多线程lock解决数据同步_C#多线程lock解决数据同步C#多线程lock解决数据同步_C#多线程lock解决数据同步_02

2.使用Lock锁前后的性能对比:

将同一变量Number累加到30,

对于简单内容主线线程执行时间:5.8秒

多线程线程同步执行时间:5.9秒

多线程异步执行时间:1.5秒

结论异步操作性能相对性能提升明显

实例代码:

C#多线程lock解决数据同步_lock实例_03C#多线程lock解决数据同步_执行时间_04

public class ThreadTest5     {         public static void Init()         {             //多个线程修改同一个值,使用lock锁解决并发             Start = DateTime.Now;             for (int i = 0; i < 4; i++)             {                 Task.Factory.StartNew(ThreadMethod);             }         }         public static DateTime Start { get; set; }         public static int Number = 1;         public static void ThreadMethod()         {             while (true)             {                 lock (typeof(ThreadTest4))                 {                     Number++;                     if (Number > 30)                     {                         StopHandle();                     }                     Console.WriteLine("当前线程:{0},Number={1}", Thread.CurrentThread.ManagedThreadId, Number);                     Thread.Sleep(200);                 }             }         }         //结束处理         public static void StopHandle()         {              //结束当前线程,并输出代码执行时间             Console.WriteLine("ID={0}线程结束,结束Number={1},执行时长:{2}",Thread.CurrentThread.ManagedThreadId,                 Number,                 DateTime.Now-Start);             //结束当前线程             Thread.CurrentThread.Abort();         }     }

View Code

C#多线程lock解决数据同步_C#多线程lock解决数据同步_05C#多线程lock解决数据同步_执行时间_06