/* VIM: let b:lcppflags="-std=c++11 -O2 -pthread" VIM: let b:cppflags=g:Iboost.g:Itbb VIM: let b:ldflags=g:Lboost.g:Ltbb VIM: let b:ldlibpath=g:Bboost.g:Btbb */ #include #include #include #include #include #include /* * Conclusion: * The first task_sheduler_init is configuring number of threads in * the thread pool. If the task scheduler initialised implicitly then * the number of threads is the number of cores. To ensure uncomment * the commented line below. */ int main ( void ) {try{ std::vector v(1024*1024); //tbb::enumerable_thread_specific count; tbb::task_scheduler_init init3(5); tbb::task_scheduler_init init(10); tbb::task_scheduler_init init2(1); tbb::enumerable_thread_specific count; tbb::parallel_for_each( v.begin(), v.end(), [&count](int& v){ ++count.local(); }); int i = 0; for ( int c : count ) { std::cout << "Thread: " << ++i << " counted " << c << std::endl; } return 0; } catch ( const std::exception& e ) { std::cerr << std::endl << "std::exception(\"" << e.what() << "\")." << std::endl; return 2; } catch ( ... ) { std::cerr << std::endl << "unknown exception." << std::endl; return 1; }}