X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/98cb31d0eba0219ec3409b93dc647d453d103fb9..4d5c6aed22b8ae1c8a73cd04d8ab800322d177bf:/src/kernel/context/ContextBoost.cpp diff --git a/src/kernel/context/ContextBoost.cpp b/src/kernel/context/ContextBoost.cpp index 256f677f62..e9ea749708 100644 --- a/src/kernel/context/ContextBoost.cpp +++ b/src/kernel/context/ContextBoost.cpp @@ -19,42 +19,30 @@ namespace context { BoostContextFactory::BoostContextFactory() : ContextFactory("BoostContextFactory"), parallel_(SIMIX_context_is_parallel()) { - BoostContext::setMaestro(nullptr); - if (parallel_) { -#if HAVE_THREAD_CONTEXTS + BoostContext::set_maestro(nullptr); + if (parallel_) ParallelBoostContext::initialize(); -#else - xbt_die("No thread support for parallel context execution"); -#endif - } } BoostContextFactory::~BoostContextFactory() { -#if HAVE_THREAD_CONTEXTS if (parallel_) ParallelBoostContext::finalize(); -#endif } smx_context_t BoostContextFactory::create_context(std::function code, void_pfn_smxprocess_t cleanup_func, smx_actor_t process) { -#if HAVE_THREAD_CONTEXTS if (parallel_) return this->new_context(std::move(code), cleanup_func, process); -#endif - return this->new_context(std::move(code), cleanup_func, process); } void BoostContextFactory::run_all() { -#if HAVE_THREAD_CONTEXTS if (parallel_) ParallelBoostContext::run_all(); else -#endif SerialBoostContext::run_all(); } @@ -167,16 +155,17 @@ void SerialBoostContext::suspend() } else { /* all processes were run, return to maestro */ XBT_DEBUG("No more process to run"); - next_context = static_cast(BoostContext::getMaestro()); + next_context = static_cast(BoostContext::get_maestro()); } - SIMIX_context_set_current(next_context); + Context::set_current(next_context); BoostContext::swap(this, next_context); } void SerialBoostContext::resume() { - SIMIX_context_set_current(this); - BoostContext::swap(BoostContext::getMaestro(), this); + BoostContext* old = static_cast(self()); + Context::set_current(this); + BoostContext::swap(old, this); } void SerialBoostContext::run_all() @@ -191,8 +180,6 @@ void SerialBoostContext::run_all() // ParallelBoostContext -#if HAVE_THREAD_CONTEXTS - simgrid::xbt::Parmap* ParallelBoostContext::parmap_; std::atomic ParallelBoostContext::threads_working_; thread_local uintptr_t ParallelBoostContext::worker_id_; @@ -237,7 +224,7 @@ void ParallelBoostContext::suspend() next_context = workers_context_[worker_id_]; } - SIMIX_context_set_current(next_context); + Context::set_current(next_context); BoostContext::swap(this, next_context); } @@ -245,14 +232,13 @@ void ParallelBoostContext::resume() { worker_id_ = threads_working_.fetch_add(1, std::memory_order_relaxed); - ParallelBoostContext* worker_context = static_cast(SIMIX_context_self()); + ParallelBoostContext* worker_context = static_cast(self()); workers_context_[worker_id_] = worker_context; - SIMIX_context_set_current(this); + Context::set_current(this); BoostContext::swap(worker_context, this); } -#endif XBT_PRIVATE ContextFactory* boost_factory() {