2012-03-13 8 views
2

독립된 (즉, 다른 메모리 주소에서 쓰기) N 작업이 있지만 완료하는 데 정확히 동일한 시간이 필요하지 않습니다 (말하면 2 ~ 10 초). P 스레드가 있습니다.다중 스레딩 독립 작업

내 N 개의 작업을 P 개의 스레드로 나눌 수 있으며 스레드를 시작할 수 있습니다. 궁극적으로 마지막에는 마지막 몇 가지 작업을 완료하기 위해 하나의 스레드가 남게되며 이는 최적이 아닙니다.

각각 1 개의 작업, WaitForMultipleObjects 및 P 스레드 등을 실행하여 P 스레드를 시작할 수도 있습니다. 스레드 생성의 오버 헤드가 작업에 비해 작기 때문에 현재 수행하고있는 작업입니다. 그러나 이것은 문제를 해결하지 못한다. P-1 스레드가 어느 시점에서 마지막 스레드를 기다리고있을 것이다.

스레드를 시작하는 방법이 있습니까? 스레드가 작업을 마자 마자 모든 작업이 완료 될 때까지 다음 사용 가능한 작업으로 이동 하시겠습니까?

감사합니다.

+0

당신도 알다시피, 당신은 아마 이것을 직접 해보려고하지 않을 것입니다. 동시 알고리즘/구조를 빠르고 정확하게 만드는 것은 소리보다 어렵습니다. [Intel 's TBB] (http://threadingbuildingblocks.org/)를 확인하십시오. – GManNickG

답변

2

예, 스레드 풀링이라고합니다. 그것은 매우 일반적인 관행입니다.

http://en.wikipedia.org/wiki/Thread_pool_pattern

기본적으로, 작업 큐 (해당 인수와 함수 포인터)를 생성하고,이 작업을 밀어 넣습니다. 당신은 N 개의 스레드가 다음 루프 (설계도 코드)를 수행하는 실행이 :

while (bRunning) { 
    task = m_pQueue.pop(); 
    if (task) { 
     executeTask(task); 
    } 
    else { 
    //you can sleep a bit here if you want 
    } 
} 

이 (등 잠을 피하는)를 구현하는 더 우아한 방법이 있지만이 그것의 요점이다.

+0

ok thanks ... 나는 이미 스레드 풀을 사용했지만이 문제보다는 스레드를 시작해야 할 필요성을 없애기 위해 사용했습니다. 감사 ! – WhitAngl