디지털 신호 수집 시스템에서 데이터는 종종 한 스레드로 시스템의 관찰자에게 푸시됩니다. Wikipedia/Observer_pattern에서멀티 스레드 옵저버 용 디자인 패턴
예 :
foreach (IObserver observer in observers)
observer.Update(message);
예컨대 예를 들어 GUI 쓰레드는 데이터 흐름을 멈추고, 관찰자 연결을 끊고, 관찰자를 처분하기를 원한다.
데이터 소스를 중지하고 연결을 처분하기위한 센티널 값을 기다려야합니다. 하지만 시스템에 대기 시간이 더 많이 걸릴 수 있습니다.
물론 데이터 펌핑 스레드가 관찰자의 주소를 요청한 경우 파괴 된 개체에 메시지를 보내는 것으로 알 수 있습니다.
누군가이 상황을 대처하는 '공식적인'디자인 패턴을 만들었습니까? 그들은하지 않아도 될까요?
나는 혼란 스럽다. 너는 무엇을 피하려고하는거야?하나의 스레드가 관찰자를 등록 취소하려고하지만 다른 스레드가 모든 관찰자를 반복하는 경우에 대해 이야기하고 있습니까? –
"IObserver"를 구현하는 구체적인 클래스를 모르지만 "업데이트"가 "데이터 소스로 최신 정보를 가져 오기 위해해야 할 일을 모두 수행"을 의미하는 경우, 폐기 된 객체의 올바른 동작은 다음과 같습니다. 조용히 아무것도하지 말라. 마지막으로 검사 된 이후에 구독 취소 요청을했는지 여부를 나타내는 플래그가 펌프 개체에있는 경우 구독자가 구독을 계속해야하는지 여부를 나타내는 각 관찰자와 연결된 개체가있는 경우 펌핑 스레드는 구독 취소를 위해 개체를 폴링 할 수 있습니다 필요할 때. – supercat