59. 예제 코드 auto NPCName = "KKamahui";cout << "NPC Name : " << NPCName << endl; auto* CharInven = new CharacterInvenInfo(); typedef std::list<MCommand*> LIST_COMMAND;LIST_COMMAND::iteratoriter = m_listCommand.begin(); auto iter = m_listCommand.begin();
61. static_assert Assert는 논리적인 오류 찾기, 작업 결과 확인, 처리해야 할 오류 조건 테스트 할때 사용 static_assert는 컴파일 시점에서 실체화할 템플릿의 전제 조건을 조사할 때 사용 static_assert( “constant-expression”, “error-message” ); “constant-expression” - 검사할 조건 식 “error-message” -조건이 false일 경우 출력할 error 메시지
62. 예제 코드 #include <iostream> using namespace std; const int MAX_LEVEL = 120; int main() { static_assert( MAX_LEVEL <= 100, "Warring - MAX_LEVEL" ); return 0; }
63. 예제 코드 template< typename T1, intStackSize > class MYSTACK { static_assert( StackSize >= 10, "Stack Size Error" ); public : MYSTACK() : data( new T[StackSize] ) { } ………. };
107. Main Thread Main Thread task_group1.run( task1) structured_task_group1.run( task1) Thread A task_group1.run( task2) Thread B task_group1.run( task3) Thread A structured_task_group1.run( task2)
108. 초 간단!!! task 사용 방법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; 태스크 그룹을 정의합니다.structured_task_groupstructured_tasks; 태스크를 정의합니다.auto structured_task1 = make_task([&] { Plus(arraynum1, true); } ); 태스크를 태스크 그룹에 추가한 후 실행합니다. structured_tasks.run( structured_task1 ); 태스크 그룹에 있는 태스크가 완료될 때까지 기다립니다.structured_tasks.wait();
110. Parallel Algorithms 데이터컬렉션을 대상으로 쉽게 병렬 작업을 할 수 있게 해주는 알고리즘들. C++ STL에서 제공하는 알고리즘과 비슷한 모양과 사용법. paeallel_for, parallel_for_each, parallel_invoke가 구현되어 있음.parallel_accumulate, parallel_partial_sum은 Beta 1에서는 아직 미 구현.
111. parallel_for for 문을 병렬화. for 문과 사용 방법이 흡사하여 쉽게 변환. step 값을 지정하는 버전과 지정하지 않는 버전 두 개가 있음(지정하지 않으면 1). index 조사는 ‘<‘만 지원.
112. 초 간단!!! parallel_for사용 법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; parallel_for에서 호출할 함수 정의 parallel_for에서 사용할 data set 정의. parallel_for사용.
114. 초 간단!!! parallel_for_each사용 법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; parallel_for_each에서 호출할 함수 정의 parallel_for_each에서 사용할 data set 정의. parallel_for_each사용.
115.
116. parallel_invoke 병렬로 일련의 태스크 실행. 동시 실행할 복수의 독립된 태스크를 실행할 때 좋음. task_group과 비슷하나 사용방법은 더 쉬움그러나 최대 10개의 태스크만 병렬 작업이 가능하다.
117. 초 간단!!! parallel_invoke사용 법 ppl.h파일을 포함합니다.#include <ppl.h> Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency; 태스크 정의 parallel_invoke사용.
118. parallel objects - combinable 스레드세이프한 오브젝트. 계산 실행한 후 최종 결과에 그 계산 결과를 통합하는 재 사용 가능한 로컬 스트리지 제공. 복수의 스레드 또는 채스크 간에 공유 리소스가 있는 경우 편리. lock-free thread-local sub-computations during parallel algorithms combinable 클래스에 사용할 데이터는 기본 생성자와 복사 생성자를 가지고 있어야 한다. Win32 API의 thread local storage와 비슷. combine, combinable_each제공
119. 예제 코드 #include <algorithm> #include <iostream> using namespace std; using namespace Concurrency; int main() { vector<int> values(10); int n = 0; generate(values.begin(), values.end(), [&] { return ++n; } ); combinable<int> sums; parallel_for_each(values.begin(), values.end(), [&](int n) { sums.local() += n; }); int result = sums.combine([](int left, int right) { return left + right; }); cout << "The sum of " << values.front() << " to " << values.back() << " is " << result << "."; }
120. 예제 코드 using namespace std; using namespace Concurrency; int main() { vector<int> values(10); int n = 0; generate(values.begin(), values.end(), [&] { return ++n; } ); combinable<list<int>> odds; parallel_for_each(values.begin(), values.end(), [&](int n) { if (n % 2 == 1) odds.local().push_back(n); }); list<int> result; odds.combine_each([&](list<int>& local) { local.sort(less<int>()); result.merge(local, less<int>()); }); cout << "The odd elements of the vector are:"; for_each(result.begin(), result.end(), [](int n) { cout << ' ' << n; }); }
121. concurrent containers 병렬 환경에서 스레드 세이프하게 데이터를 저장. concurrent_queue, concurrent_vector, concurrent_hash_map. Beta1에서는 아직 미 구현.