다음 두 스 니펫에서 첫 번째는 안전한가요, 아니면 두 번째는해야합니까?
안전하다는 것은 각 스레드가 스레드가 생성 된 동일한 루프 반복에서 Foo의 메서드를 호출하도록 보장된다는 것을 의미합니까?
아니면 새로운 변수 "local"에 대한 참조를 루프의 각 반복에 복사해야합니까?
var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{
Thread thread = new Thread(() => f.DoSomething());
threads.Add(thread);
thread.Start();
}
-
var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{
Foo f2 = f;
Thread thread = new Thread(() => f2.DoSomething());
threads.Add(thread);
thread.Start();
}
업데이트 : Jon Skeet의 답변에서 지적했듯이 이것은 스레딩과 특별히 관련이 없습니다.