我只是尝试了这个简单的程序...没什么特别的..
double[] a = new double[100000];
double[] b = new double[100000];
List<double> a1 = new List<double>();
List<double> b1 = new List<double>();
for (Int64 i = 0; i < 100000; i++)
{
a[i] = i;
a1.Add(i);
}
Parallel.For(0, 100000, delegate(Int64 i)
{
b[i] = i;
b1.Add(i);
});
根据这段代码,a、b、a1、b1各必须存储100000个数字。但有时,变量 b1(由并行进程更新的列表)的数字少于 100000 个(在 90000 到 100000 之间保持变化)。我想知道为什么...
List<T>
对于同时写入的多个线程来说不是线程安全的,如上所述MSDN 页面。您必须同步访问(违背了多线程的目的)或使用线程安全集合。有可用的线程安全集合System.Collections.Concurrent
命名空间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)