異なるスレッド間で共有されるこの静的リストがあるとしましょう:
public static List<myClass> fooList = new List<myClass>();
今、スレッドでこの共有リストにアクセスして、独自のプライベートリストを作成したいのですが、次のことをしたいと思います:
List<myClass> newFooList = new List<myClass>();
lock (fooList)
{
foreach (myClass element in fooList)
{
newFooList.Add(element);
}
}
しかし、そうすると、共有リストと同じ要素を参照する新しいリストを作成しているので、後でロックなしで newFooList にアクセスすると (そうあるべきです)、実際には同じ要素にアクセスしています。共有リストなので、ロックに違反していますよね?
解決策は、参照を渡す代わりに、fooList の要素と同じ内容の newFooList の新しい要素を作成することですか?