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