나는 몇 가지 데이터 멤버와 클래스가 있습니다. 나는 Foo 클래스도 안전하게 쓰레드로 만들고 싶습니다. 아래 코드가이 작업을 수행하는 가장 좋은 방법입니까?C# 중첩는 동기화
public Foo(Foo f)
{
lock(f)
{
foreach (int i in f.intLst)
{
this.intLst.Add(i)
}
//More complicated
}
}
public Foo Merge(Foo f1, Foo f2)
{
Foo fReturn = new Foo(f1);//Using the constructor above
lock(f2)
{
foreach (int i in f2.intLst)
{
fReturn.intLst.Add(i);
}
//More complicated merge code
}
return fReturn;
}
간단합니까? 대신 모니터를 사용해야합니까? 나는 락이 모니터 클래스를 구현한다는 것을 알고 있지만 아마도 여전히 이유가있다. 또한 위 샘플에서 교착 상태 처리에 대해 걱정할 필요가 있습니다.
f1에 복사 생성자 중에 f2가 변경되면 f1과 f2를 모두 lock()해야 할 필요가 있습니다.
목록에 유형에는 Union() 및 Concat() 메소드가 있습니다. –