TPL Parallel.for 如何处理数据锁定
本文关键字:处理 数据 锁定 Parallel for 何处理 TPL | 更新日期: 2023-09-27 18:32:54
我试图了解 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();