이 스레딩 시나리오를 오해 할 수도 있습니다.하지만 그것이 내가 묻는 이유입니다.스레드 A를 실행중인 객체가 스레드 B에 의해 파괴되면 어떻게됩니까?
다음 상황 (C# 스레딩을 가정)에서 어떤 일이 발생합니까? 참고 :이 시나리오는 핵심 문제로 단순화되어 추가 기능은 무시됩니다.
2 개의 객체 a와 b가 각각 클래스 A와 B의 인스턴스입니다. 'b'는 'a'의 멤버입니다.
'b'는 처리 루프를 실행 중이고 계속해서 다른 작업을 수행하고 있습니다. 한 지점에서 'b'는 'a'로 이벤트를 보내는 상황을 감지합니다. 'a'가이 이벤트를 수신하면 다음 코드를 실행합니다.
void b_eventFoo()
{
b.UnhookEvents();//clears the delegate that truggered this event function
this.b = new B();
b.HookEvents(this);//connects the new b object to this A
}
이전 'B'객체는 어떻게됩니까? 원래 'b'는 여전히 일부 처리를 수행 중이며 이벤트를 트리거 한 스레드가 여전히 실행 중일 수 있습니다. 나는이 시나리오의 결과를 예측할만큼 충분히 스레딩을 이해하지 못한다.
상관 없습니까?
아무 것도 명확히해야하는지 알려주세요.
B에 대한 유일한 참조 인 경우 삭제되지 않음 b y 가비지 컬렉터? –
@valya, 스레드가 종료 된 후에 만 스레드 처리기가 참조를 유지하므로 A 참조가 유일한 것이 아닙니다. – Dathan
valya : 아니요, 스레드의 스택도 'this'로 최소한 'b'에 대한 참조를 보유합니다. –