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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM