[英]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.