//------------------------------------------------------------------------ // Methods of private_server //------------------------------------------------------------------------ private_server::private_server( tbb_client& client ) : my_client(client), my_n_thread(client.max_job_count()), my_stack_size(client.min_stack_size()), my_thread_array(NULL) { my_ref_count = my_n_thread+1; my_slack = 0; #if TBB_USE_ASSERT my_net_slack_requests = 0; #endif /* TBB_USE_ASSERT */ my_asleep_list_root = NULL; my_thread_array = tbb::cache_aligned_allocator<padded_private_worker>().allocate( my_n_thread ); memset( my_thread_array, 0, sizeof(private_worker)*my_n_thread ); for( size_t i=0; i<my_n_thread; ++i ) { private_worker* t = new( &my_thread_array[i] ) padded_private_worker( *this, client, i ); t->my_next = my_asleep_list_root; my_asleep_list_root = t; } }
//------------------------------------------------------------------------ // Methods of private_server //------------------------------------------------------------------------ private_server::private_server( tbb_client& client ) : my_client(client), my_n_thread(client.max_job_count()), my_thread_array(NULL) { my_ref_count = my_n_thread+1; my_slack = 0; #if TBB_USE_ASSERT my_net_slack_requests = 0; #endif /* TBB_USE_ASSERT */ my_asleep_list_root = NULL; size_t stack_size = client.min_stack_size(); my_thread_array = tbb::cache_aligned_allocator<padded_private_worker>().allocate( my_n_thread ); memset( my_thread_array, 0, sizeof(private_worker)*my_n_thread ); // FIXME - use recursive chain reaction to launch the threads. for( size_t i=0; i<my_n_thread; ++i ) { private_worker* t = new( &my_thread_array[i] ) padded_private_worker( *this, client, i ); thread_monitor::launch( private_worker::thread_routine, t, stack_size ); } }