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

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锁后,修改数据保证了数据的在多个线程操作时的同步。

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

将同一变量Number累加到30,

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

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

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

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

实例代码:

    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

原文地址:https://www.cnblogs.com/tianma3798/p/5764700.html