89ParallarLock

复制代码
        static void Main(string[] args)
        {
            int[] nums = new int[] { 1, 2, 3, 4 };
            int total = 0;
            Parallel.For<int>(0, nums.Length, () =>
            {
                return 1;
            }, (i, loopState, subtotal) =>
             {
                 subtotal += nums[i];
                 return subtotal;
             },
             (x) => Interlocked.Add(ref total, x)
             );
            Console.WriteLine("total={0}", total);

            Console.WriteLine();

            SampleClass sample = new SampleClass();
            Object obj = new object();
            Parallel.For(0, 10000000, (i) =>
            {
                lock (obj)
                {
                    sample.SimpleAdd();
                }
            });
            Console.WriteLine(sample.SomeCount);

            Console.ReadKey();
        }

        class SampleClass
        {
            public long SomeCount { get; private set; }

            public void SimpleAdd()
            {
                SomeCount++;
            }
        }
复制代码

在Parallel中加锁要非常注意,长时间锁定某个共享资源所带来的同步性能损耗。

posted @   Wen_Chen  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示