下面的代码似乎可以工作 - 也就是用增量整数的子列表填充外部列表。嵌套列表的并行填充
我只是幸运吗?
我很注意预先分配“插槽”,而不是交叉。
class Program
{
static List<List<int>> allLists;
static void Main(string[] args)
{
allLists = new List<List<int>>(553);
for (int i = 0; i < 553; i++)
{
allLists.Insert(i, new List<int>());
}
Enumerable.Range(0, 552).AsParallel().ForAll((i) => InsertRange(i));
}
static void InsertRange(int index)
{
allLists[index] = Enumerable.Range(0, 7205).ToList();
}
}
从来没有危险的一个名单将垃圾另一个?
你为什么要创建所有这些空列表来覆盖它们?你为什么使用'Insert()'而不是'Add()'?最重要的是,如果你想要一个具有固定数量元素的集合,为什么你甚至使用'List'而不是一个数组? – svick
插入方式更好,因为即使一个线程以某种方式中断了另一个线程,它也可能不会导致数据丢失。 – MrFox
@MrFox 1.代码的那部分是完全同步的,在那一点上没有其他线程。 2.并行'Insert()'不会工作,因为:a。 'Insert()'当然不是线程安全的。湾您可以在列表中的最后一个位置后面插入(),但不能超出该位置。 – svick