1

我试图了解 TPL 的更低级别的操作,并且想知道如何并行处理数据锁定,例如在 2D 数组上执行计算。我一直在 MSDN 上兜圈子,一直没能找到详细的解释。有什么建议么?

4

3 回答 3

1

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

于 2013-09-26T21:13:04.300 回答
0

我将发布一个严重的过度简化以在代码中绘制图片;将此发布到控制台应用程序中,它会吐出数据以及哪个线程正在处理它。您可以对其进行更新以使用您自己的数据以使其更具相关性。

        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();
于 2013-09-26T21:17:37.857 回答
0

它不需要任何锁定,因为从不存在多个线程访问内存中相同位置的情况。有一个线程正在为工人安排工作,切出要完成的工作部分并将它们分发出去。因为只有一个线程在做这件事,所以它不需要与其他任何人同步。没有工作人员(不应该)处理共享数据。

于 2013-09-26T20:57:41.810 回答