2011-11-28 6 views
4

TBB를 사용하여 스레드 풀 동작을 얻고 싶습니다. 그러나 TBB에 관한 문서를 읽을 때마다 항상 평행선, 병렬 dowhile 등에 대해 이야기합니다. 대조적으로 내가 필요한 것은 스레드 풀에 작업을 할당하여 해당 작업이 '자체적으로'실행되도록하는 주 스레드입니다. 비동기식으로 여기에있는 작업은 GUI에 대한 이벤트 처리가 될 수 있습니다.비 병렬 작업에 TBB 사용

TBB 작업 스케줄러가 이러한 동작에 적절합니까? 작업 스케줄러에서 얻은 인상은 작업을 세분화하여 서로 병렬로 실행할 수있는 경우에만 유용하다는 것입니다.

+2

http://threadingbuildingblocks.org/documentation.php에서 "디자인 패턴"안내서를 다운로드하십시오. GUI 스레드 (6 장, "GUI 스레드"참조)에서 장시간 실행되는 작업의 부담을 덜어 주며, 수행 방법을 보여주는 간단한 예제가 있습니다. –

답변

8

버전 3.0부터 TBB는 비동기 작업을 지원합니다. 이를 위해 tbb::task::enqueue()이라는 특별한 직장 제공 방법이 추가되었습니다. tbb::task::spawn()과 달리이 방법을 사용하면 원래 스레드가 wait_for_all()과 같은 작업 디스패치 메서드에 절대 입력하지 않아도 대기열에 포함 된 작업이 실행됩니다.

task::enqueue()에 대한 간단한 사용 예 : @JimMishell는 코멘트, GUI 이벤트 처리가 "디자인 패턴"에서 찾을 수 있습니다 위해 그것을 사용하는 방법의 예에서 언급 한 바와 같이

class MyTask : public tbb::task { 
    /*override*/ tbb::task* execute() { 
     // Do the job 
     return NULL; // or a pointer to a new task to be executed immediately 
    } 
}; 

MyTask* t = new (tbb::task::allocate_root()) MyTask(); 
tbb::task::enqueue(*t); 
// Do other job; the task will be executed asynchronously 

; 이 방법에 대한 공식적인 설명은 Reference manual에 있습니다 (두 가지 모두 TBB documentation 참조).