繁体   English   中英

TPL Parallel.for如何处理数据锁定

[英]How does a TPL Parallel.for handle data locking

我试图了解TPL的更底层操作,并且想知道并行处理如何处理数据锁定,例如,在2D数组上执行计算。 我已经在MSDN上转了一圈,却找不到详细的解释。 有什么建议么?

如果您在for循环的主体中访问/修改共享的可变状态,则同步访问取决于您。

它不需要任何锁定,因为永远不会有多个线程访问内存中相同位置的情况。 只有一个线程可以为工人安排工作,切掉要完成的工作并将其分发出去。 因为只有一个线程在执行此操作,所以它不需要与其他任何人同步。 没有(应该)在共享数据上工作的工人。

我将过分简化以在代码中绘制图片。 将其发布到控制台应用程序中,它将吐出数据以及正在使用哪个线程。 您可以更新它以使用您自己的数据以使其更相关。

        var list = new List<int>(64);

        for (var i = 1; i <= 64; i++)
        {
            list.Add(i);
        }

        var result = Parallel.ForEach(list, entry =>
        {
            var line = string.Format("Thread ID {0} is listing entry {1}", Thread.CurrentThread.ManagedThreadId, entry);
            Console.WriteLine(line);
        });

        while (!result.IsCompleted)
        {
            Thread.Sleep(50);
        }

        Console.ReadKey();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM