범위를 알 수 없을 때 사용하는 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;
}
#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 |