2012-11-21 5 views
1

배열이 있다고 가정합니다. 모든 항목은 처음에 null 배열에 쓰는 쓰레드 1입니다. 배열의 모든 항목이 설정되고 처리 될 때까지 Thread2 블록.배열의 항목이 업데이트된다는 알림을받는 방법은 무엇입니까?

저는 이렇게했습니다. 저는 AutoResetEvent으로 다른 배열을 만들었습니다. Thread1에서 배열 항목을 업데이트 할 때마다 해당 AutoResetEvent와 Thread2에 을 호출합니다. WaitHandle.WaitAll(events);

하지만 지금은 이것이 효율적이지 않다고 생각합니다. 아마도 하나의 이벤트를 사용해야한다고 생각합니다. 얼마나 많은 항목이 아직 업데이트되는지 계산할 수 있기 때문에 마지막 업데이트시 이벤트를 발생시킬 수 있습니다.

이것은 단순한 예입니다. 실생활에서는 조금 어려워 보이지만, 더 나은 것을 제안 할 수 있을까요?

또한 Thread1에서 Volatile.Read을 사용해야합니까? (나는 더블 CPU 머신을 가지고있다).

답변

0

BlockingCollection을 보지 않으므로 항목을 스레드로부터 안전하게 추가 할 수 있습니까?

thread safe ObserveableCollection을 사용하면 알림을받을 수 있습니다.

+0

어떻게 "WaitAll"을 대체 할 수 있습니까? – javapowered

+0

또한 "가장 간단한"솔루션을 선호합니다. 왜냐하면 나는 대기 시간에 신경을 쓰고 앞으로는 C++로 이식 할 것이기 때문입니다. – javapowered

+0

작업 방법을 사용할 수 있습니다. http://msdn.microsoft.com/en-us/library/dd235635.aspx – Jon

관련 문제