17 #include "../rml/include/rml_tbb.h"    18 #include "../rml/server/thread_monitor.h"    25 using rml::internal::thread_monitor;
   103 #if _MSC_VER && !defined(__INTEL_COMPILER)   105     #pragma warning(push)   106     #pragma warning(disable:4510 4610)   114 #if _MSC_VER && !defined(__INTEL_COMPILER)   148     atomic<int> my_net_slack_requests;
   170             my_client.acknowledge_close_connection();
   199     void register_master ( ::rml::server::execution_resource_t& ) 
__TBB_override {}
   200     void unregister_master ( ::rml::server::execution_resource_t ) 
__TBB_override {}
   207 #if _MSC_VER && !defined(__INTEL_COMPILER)   209     #pragma warning(push)   210     #pragma warning(disable:4189)   212 #if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2 && !__MINGW64__   214 __attribute__((force_align_arg_pointer))
   218     AVOID_64K_ALIASING( self->my_index );
   222 #if _MSC_VER && !defined(__INTEL_COMPILER)   228         thread_monitor::join(handle);
   230         thread_monitor::detach_thread(handle);
   263     ::rml::job& j = *
my_client.create_one_job();
   268             thread_monitor::cookie c;
   321     my_n_thread(client.max_job_count()),
   322     my_stack_size(client.min_stack_size()),
   323     my_thread_array(NULL)
   328     my_net_slack_requests = 0;
   348     asleep_list_mutex_type::scoped_lock 
lock;
   371             if( additional_slack>0 ) {
   380                     if( old<=0 ) 
goto done;
   381                 } 
while( 
my_slack.compare_and_swap(old-1,old)!=old );
   386         if( additional_slack ) {
   401     my_net_slack_requests+=delta;
   405     } 
else if( delta>0 ) {
 thread_monitor my_thread_monitor
Monitor for sleeping when there is no work to do.
 
static const size_t cache_line_size
 
tbb::atomic< private_worker * > my_asleep_list_root
List of workers that are asleep or committed to sleeping until notified by another thread.
 
const size_t my_index
index used for avoiding the 64K aliasing problem
 
const size_t my_stack_size
Stack size for each thread. */.
 
padded_private_worker(private_server &server, tbb_client &client, const size_t i)
 
*this has associated thread that is starting up.
 
scheduler_mutex_type asleep_list_mutex_type
Protects my_asleep_list_root.
 
private_server(tbb_client &client)
 
pointer allocate(size_type n, const void *hint=0)
Allocate space for n objects, starting on a cache/sector line.
 
static unsigned default_num_threads()
 
private_server & my_server
Associated server.
 
asleep_list_mutex_type my_asleep_list_mutex
 
thread_monitor::handle_type thread_handle
 
Associated thread is doing normal life sequence.
 
void suppress_unused_warning(const T1 &)
Utility template function to prevent "unused" warnings by various compilers.
 
atomic< int > my_ref_count
Counter used to determine when to delete this.
 
void run()
Actions executed by the associated thread.
 
tbb_client & my_client
Associated client.
 
padded_private_worker * my_thread_array
 
Associated thread has ended normal life sequence and promises to never touch *this again.
 
void start_shutdown()
Called by a thread (usually not the associated thread) to commence termination.
 
char pad[cache_line_size - sizeof(private_worker)%cache_line_size]
 
void protect_affinity_mask(bool)
 
const tbb_client::size_type my_n_thread
Maximum number of threads to be created.
 
private_worker * my_next
Link for list of workers that are sleeping or have no associated thread.
 
tbb_server * make_private_server(tbb_client &client)
Factory method called from task.cpp to create a private_server.
 
static bool does_client_join_workers(const tbb::internal::rml::tbb_client &client)
 
bool try_insert_in_asleep_list(private_worker &t)
Try to add t to list of sleeping workers.
 
static __RML_DECL_THREAD_ROUTINE thread_routine(void *arg)
 
version_type version() const __TBB_override
 
const size_t NFS_MaxLineSize
Compile-time constant that is upper bound on cache line/sector size.
 
Base class for types that should not be copied or assigned.
 
static void release_handle(thread_handle my_handle, bool join)
 
void wake_some(int additional_slack)
Equivalent of adding additional_slack to my_slack and waking up to 2 threads if my_slack permits.
 
state_t
State in finite-state machine that controls the worker.
 
void yield() __TBB_override
 
void wake_or_launch()
Wake up associated thread (or launch a thread if there is none)
 
void propagate_chain_reaction()
Wake up to two sleeping workers, if there are any sleeping.
 
thread_handle my_handle
Handle of the OS thread associated with this worker.
 
virtual ~private_server()
 
Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
 
void const char const char int ITT_FORMAT __itt_group_sync s
 
private_worker(private_server &server, tbb_client &client, const size_t i)
 
atomic< state_t > my_state
 
atomic< int > my_slack
Number of jobs that could use their associated thread minus number of active threads.
 
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
 
void adjust_job_count_estimate(int delta) __TBB_override
 
void deallocate(pointer p, size_type)
Free block of memory that starts on a cache line.
 
void poison_pointer(T *__TBB_atomic &)
 
void independent_thread_number_changed(int) __TBB_override
 
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void * lock
 
__TBB_SCHEDULER_MUTEX_TYPE scheduler_mutex_type
Mutex type for global locks in the scheduler.
 
void request_close_connection(bool) __TBB_override
 
unsigned default_concurrency() const __TBB_override