X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/be6e8d3215d3e25f48c7d2d0b359cf178f978d41..d66477d0584a740d7e78942eefabc039f467453a:/src/simix/BoostContext.cpp diff --git a/src/simix/BoostContext.cpp b/src/simix/BoostContext.cpp index aa35075887..241ecc36b7 100644 --- a/src/simix/BoostContext.cpp +++ b/src/simix/BoostContext.cpp @@ -8,6 +8,10 @@ #include +#include +#include +#include + #include #include @@ -34,7 +38,7 @@ public: void resume(); }; -#ifdef CONTEXT_THREADS +#if HAVE_THREAD_CONTEXTS class BoostParallelContext : public BoostContext { public: BoostParallelContext(std::function code, @@ -51,7 +55,7 @@ public: bool BoostContext::parallel_ = false; xbt_parmap_t BoostContext::parmap_ = nullptr; -unsigned long BoostContext::threads_working_ = 0; +uintptr_t BoostContext::threads_working_ = 0; xbt_os_thread_key_t BoostContext::worker_id_key_; unsigned long BoostContext::process_index_ = 0; BoostContext* BoostContext::maestro_context_ = nullptr; @@ -62,7 +66,7 @@ BoostContextFactory::BoostContextFactory() { BoostContext::parallel_ = SIMIX_context_is_parallel(); if (BoostContext::parallel_) { -#ifndef CONTEXT_THREADS +#if !HAVE_THREAD_CONTEXTS xbt_die("No thread support for parallel context execution"); #else int nthreads = SIMIX_context_get_nthreads(); @@ -77,7 +81,7 @@ BoostContextFactory::BoostContextFactory() BoostContextFactory::~BoostContextFactory() { -#ifdef CONTEXT_THREADS +#if HAVE_THREAD_CONTEXTS if (BoostContext::parmap_) { xbt_parmap_destroy(BoostContext::parmap_); BoostContext::parmap_ = nullptr; @@ -91,7 +95,7 @@ smx_context_t BoostContextFactory::create_context(std::function code, { BoostContext* context = nullptr; if (BoostContext::parallel_) -#ifdef CONTEXT_THREADS +#if HAVE_THREAD_CONTEXTS context = this->new_context( std::move(code), cleanup_func, process); #else @@ -105,7 +109,7 @@ smx_context_t BoostContextFactory::create_context(std::function code, void BoostContextFactory::run_all() { -#ifdef CONTEXT_THREADS +#if HAVE_THREAD_CONTEXTS if (BoostContext::parallel_) { BoostContext::threads_working_ = 0; xbt_parmap_apply(BoostContext::parmap_, @@ -157,7 +161,7 @@ BoostContext::BoostContext(std::function code, smx_context_usable_stack_size, smx_ctx_boost_wrapper); } else { - #if HAVE_BOOST_CONTEXT == 1 + #if HAVE_BOOST_CONTEXTS == 1 this->fc_ = new boost::context::fcontext_t(); #endif if (BoostContext::maestro_context_ == nullptr) @@ -167,7 +171,7 @@ BoostContext::BoostContext(std::function code, BoostContext::~BoostContext() { -#if HAVE_BOOST_CONTEXT == 1 +#if HAVE_BOOST_CONTEXTS == 1 if (!this->stack_) delete this->fc_; #endif @@ -181,13 +185,13 @@ BoostContext::~BoostContext() void BoostContext::resume() { SIMIX_context_set_current(this); -#if HAVE_BOOST_CONTEXT == 1 +#if HAVE_BOOST_CONTEXTS == 1 boost::context::jump_fcontext( maestro_context_->fc_, this->fc_, (intptr_t) this); #else boost::context::jump_fcontext( - &boost_maestro_context_->fc_, this->fc_, + &maestro_context_->fc_, this->fc_, (intptr_t) this); #endif } @@ -211,7 +215,7 @@ void BoostSerialContext::suspend() maestro_context_); } SIMIX_context_set_current((smx_context_t) next_context); - #if HAVE_BOOST_CONTEXT == 1 + #if HAVE_BOOST_CONTEXTS == 1 boost::context::jump_fcontext( this->fc_, next_context->fc_, (intptr_t) next_context); #else @@ -228,7 +232,7 @@ void BoostSerialContext::stop() // BoostParallelContext -#ifdef CONTEXT_THREADS +#if HAVE_THREAD_CONTEXTS void BoostParallelContext::suspend() { @@ -241,14 +245,14 @@ void BoostParallelContext::suspend() } else { XBT_DEBUG("No more processes to run"); - unsigned long worker_id = - (unsigned long) xbt_os_thread_get_specific(worker_id_key_); + uintptr_t worker_id = + (uintptr_t) xbt_os_thread_get_specific(worker_id_key_); next_context = static_cast( workers_context_[worker_id]); } SIMIX_context_set_current((smx_context_t) next_context); -#if HAVE_BOOST_CONTEXT == 1 +#if HAVE_BOOST_CONTEXTS == 1 boost::context::jump_fcontext( this->fc_, next_context->fc_, (intptr_t)next_context); #else @@ -265,7 +269,7 @@ void BoostParallelContext::stop() void BoostParallelContext::resume() { - unsigned long worker_id = __sync_fetch_and_add(&threads_working_, 1); + uintptr_t worker_id = __sync_fetch_and_add(&threads_working_, 1); xbt_os_thread_set_specific(worker_id_key_, (void*) worker_id); BoostParallelContext* worker_context = @@ -273,7 +277,7 @@ void BoostParallelContext::resume() workers_context_[worker_id] = worker_context; SIMIX_context_set_current(this); -#if HAVE_BOOST_CONTEXT == 1 +#if HAVE_BOOST_CONTEXTS == 1 boost::context::jump_fcontext( worker_context->fc_, this->fc_, (intptr_t) this); #else @@ -286,6 +290,7 @@ void BoostParallelContext::resume() XBT_PRIVATE ContextFactory* boost_factory() { + XBT_VERB("Using Boost contexts. Welcome to the 21th century."); return new BoostContextFactory(); }