범위를 알 수 없을 때 사용하는 while문을 병렬화 시킨 로직이다.

그리고 type은 정해져 있지 않으므로 포인터를 이용하여 리스트 자료구조를  순회를 할때도 문제 없다

 

 

 

[-] Collapse
#include <stdio.h>
#include <tchar.h>
#include <time.h>
#include <tbb/tbb.h>
#include <tbb/parallel_while.h>

#ifdef _DEBUG
#pragma  comment(lib, "tbb_debug.lib")
#else
#pragma  comment(lib, "tbb.lib")
#endif // _DEBUG

using namespace tbb;

class CItemStream
{
public:
    CItemStream(int n) : num(n) {}

    // 여기서는 카운터 연산만 처리 해야함... 여기에서는 동기화 이슈가 없음
    bool pop_if_present(int &count)
    {
        // 언제 끝날지 모르게 하기 위해서 rand 함수를 사용
        // 실제로 count를 이용할 경우에는  if (func(num) == 0) 등등 꼴리는데로 사용!!!
        if(!(rand() % 10  != 0))
        {
            printf("루프종료...\n") ;
            return false ;
        }
        printf("Count %d\n", num) ;
        count = num ;
        num++ ;
        return true ;
    }
public:
    int num ;
};

class CBody
{
public:
    // 실제로 자료에 대한 처리는 여기서 해야 함
    void operator()(int n) const
    {
        printf("count : %d에 대한 처리 \n", n ) ;
    }
    typedef int argument_type ;
};

int _tmain(int argc, _TCHAR* argv[])
{
    srand((unsigned int)time(0)) ;
    // 아래 직렬로직을  TBB로 병렬화 루틴...
    // 단 카운트가 순서대로 처리 되지 않는다.

// int num = 0 ;
// while (rand() % 10 == 0 )
// {
// printf("count : %d에 대한 처리 \n", num ) ;
// num++ ;
// }


    parallel_while<CBody> w ;
    CItemStream stream_(0) ;
    CBody body ;

    w.run(stream_, body) ;
    printf("루프 끝\n") ;


    getchar() ;
    return 0;
}

'C++ > Intell C++' 카테고리의 다른 글

간단한 TBB parallel_for 예제  (0) 2014.09.16
간단한 TBB parallel_reduce 예제  (0) 2014.09.16
간단한 TBB parallel_sort 예제  (0) 2014.09.16
간단한 TBB parallel_invoke 예제  (1) 2014.09.16

+ Recent posts