2013-05-16 3 views

답변

0

많은 양의 데이터에 대한 simultaenously

  • 효율적인하지만, 꽤 어려운, 실제로 , 당신은 정말로 그 요구 사항을 가지고 있다면 열심히 생각해야합니다.

    ... 당신은 당신의 Queue<T>는 생산자/소비자를 읽을 때 즉시 내 마음에 온천 어떤 것하지 않는 것을 깨달았다 이제

    . 당신을

    private Queue<T> queue; 
    
    private void ProducerProc() 
    { 
        while (true) // real abort condition goes here 
        { 
         lock (this.queue) 
         { 
          this.queue.Enqueue(CreateThing()); 
          Monitor.Pulse(this.queue); 
         } 
         Thread.Yield(); 
        } 
    } 
    
    private void ConsumerProc() 
    { 
        while (true) 
        { 
         T thing; 
         lock (this.queue) 
         { 
          Monitor.Wait(this.queue); 
          thing = this.queue.Dequeue(); 
         } 
         HandleThing(thing); 
        } 
    } 
    

    lock를보고 :

    의 당신이 ProducerProc()를 실행하는 스레드와 다른 실행 ConsumerProc() 및 생산 방법 CreateThing() 및 소비 방법 HandleThing() 있다고 가정 해 봅시다, 내 솔루션은 다음과 같을 것 즉, 두 스레드가 동시에 데이터 구조에 액세스하지 못한다는 사실을 깨닫게됩니다. 그러나 그런 다음, 그들은 단지 가장 작은 시간 동안 잠금을 유지합니다. 그리고 Pulse/Wait는 소비자 스레드가 생산자 스레드에 즉시 반응하도록합니다. 이것은 충분히 좋을 것입니다.