2012-05-14 4 views
0

나는 다음과 같은 형태를 취 목록을 조작하기 위해 각 클래스에서 두 개의 클래스하는 private static List<int> list 각, 및 방법이 있습니다두 개의 콜렉션을 조작하는 두 개의 스레드를 해결하는 방법은 무엇입니까?

public static void Add(int number) 
{ 
    lock (list) 
    { 
    Monitor.Pulse(list); 

    containers.Add(list); 

    Monitor.Wait(list); 
    } 
} 

문제는 내가 두 개의 스레드를 가지고 있고, Thread1이있는 것입니다 Add() 메서드는 Class1에 있고 Thread2는 Class2의 Add() 메서드에 있고 각각은 Wait() 메서드에 도달합니다. 그러나 서로 다른 대기열에 있기 때문에 Pulse() 메서드가 작동하지 않습니다 (적어도 그것이 내가 의심하는 것입니다.) 어떻게이 수수께끼를 해결할 수 있습니까?

+2

무엇을하려고 하시겠습니까? 지나치게 복잡한 일이있는 것처럼 보입니다. – Tudor

+1

게시 한 코드가 올바르지 않은 것 같습니다. '컨테이너'란 무엇입니까? 그리고 매개 변수'container'는 어디에서도 사용되지 않습니다. – Tudor

+4

왜'Monitor.Pulse'와'Monitor.Wait'가 필요한가요? 왜 '잠금'충분하지 않아? –

답변

0

둘 다 동일한 기본 참조를 공유하면 괜찮습니다. lock 키워드를 사용하려고하면 컴파일러에서 잠금 (...) {}을 볼 때 자동으로 수행하므로 Monitor.wait 및 Monitor.pulseall을 사용할 필요가 없습니다.

0

.NET 4를 사용하는 경우 동시 수집을 사용할 수 있습니다.

More info on MSDN

관련 문제