考虑这个例子:
var x = 0;
for (var i = 0; i < 100; i++ )
{
for (var a = i+1; a < 100; a++)
x += 1;
}
当打印 x 我们always得到 4950。如果我想并行化这个怎么办?
这就是我想出的
Parallel.For(0, 100, i => Parallel.For(i + 1, 100, a => { x += 1; }));
However每次我运行它时,它不会打印 4950 。为什么?
并行扩展可帮助您以近乎命令式的语法创建、分配、运行和会合任务。什么doesn't要做的就是照顾各种线程安全(其中之一pitfalls http://msdn.microsoft.com/en-us/library/dd997403.aspx?ppud=4)。您正在尝试使并行线程同时更新单个共享变量。要正确地执行类似的操作,您必须引入例如锁定。
我不确定你想做什么。我假设您的代码只是一个占位符或实验。仅当您可以隔离不同的工作时,并行化才适用;不是当你经常需要与共享数据会合时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)