-1
무엇 다음을 수행하는 데 사용할 수있는 최선의 데이터 구조는 다음과 같습니다최고의 데이터 구조? - 2 개 스레드, 1 명 프로듀서, 1 개 소비자
2 스레드 :
- (1)가 생성하는 데이터 구조
- 1 (쓰기) 데이터 구조에서 소비 (읽은 다음 삭제)합니다. 는
- 스레드 안전
- 생산자와 소비자 액세스 할 수있는 데이터 구조 I는 4 불가능하다는 점을 언급하지 않았다
무엇 다음을 수행하는 데 사용할 수있는 최선의 데이터 구조는 다음과 같습니다최고의 데이터 구조? - 2 개 스레드, 1 명 프로듀서, 1 개 소비자
2 스레드 :
많은 양의 데이터에 대한 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는 소비자 스레드가 생산자 스레드에 즉시 반응하도록합니다. 이것은 충분히 좋을 것입니다.