아래 코드가 작동하는 것처럼 보입니다. 즉, 증분 정수의 하위 목록으로 외부 목록을 채 웁니다.중첩 목록의 병렬 채우기
행운이 있습니까?
"슬롯"을 미리 할당하고 교차하지 않도록주의하십시오.
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();
}
}
하나의 목록이 다른 목록을 지울 위험이 있습니까?
비어있는 목록 만 모두 덮어 쓰게 만드는 이유는 무엇입니까? 왜 당신은'Add()'대신'Insert()'를 사용하고 있습니까? 가장 중요한 것은, 요소가 고정 된 콜렉션을 원한다면 배열 대신에'List'를 사용하는 것입니다. – svick
Insert는 방법이 더 좋습니다. 왜냐하면 한 스레드가 어떻게 든 다른 스레드를 중단하더라도 데이터 손실을 일으키지 않기 때문입니다. – MrFox
@MrFox 1. 코드의 해당 부분은 완전히 동기 적이므로 그 시점에는 다른 스레드가 없습니다. 2. 다음과 같은 이유로'Insert()'가 작동하지 않습니다 : a. 'Insert()'는 확실히 thread-safe가 아닙니다. 비. 리스트의 마지막 위치 다음에'Insert()'할 수 있지만, 그 위치를 넘을 수는 없습니다. – svick