C#使用2个线程将数组值增加1?

如果您要解决以下问题,该怎么办?

目标是创建一个由1000个整数值组成的数组,将其初始化为0,然后使用2个线程将所有值递增,每个线程将使每个数组值递增1。

我用下面的代码做到了,但是我真的不确定我的解决方案还可以...

static async Task Main(string[] args)
        {
            var count = 100;
            int[] array = new int[count];
            Array.Clear(array,array.Length);

            await Task.WhenAll(IncrementArray(array,"Task 1"),IncrementArray(array,"Task 2"));
            Array.ForEach(array,Console.WriteLine);
        }

        static object obj = new object();

        static async Task IncrementArray(int[] array,string taskName)
        {
            for (var i = 0; i < array.Length; i++)
            {
                Console.WriteLine(taskName);
                await Task.Delay(100);
                lock (obj)
                {
                    array[i]++;
                }
            }
        }

感谢您的帮助!

zxk8111988 回答:C#使用2个线程将数组值增加1?

您的解决方案不正确。您有一个竞争条件,即两个线程可能尝试同时增加一个元素,然后产生不正确的结果-例如,数组的元素可能保持1。

请参见Interlocked类,以及lock关键字。

,

您应该使用Interlocked.Increment类似于++,但原子将值增加一个单位,保持线程安全

本文链接:https://www.f2er.com/3110761.html

大家都在问