+simgrid::xbt::Parmap<smx_actor_t>* ParallelBoostContext::parmap_;
+std::atomic<uintptr_t> ParallelBoostContext::threads_working_;
+xbt_os_thread_key_t ParallelBoostContext::worker_id_key_;
+std::vector<ParallelBoostContext*> ParallelBoostContext::workers_context_;
+
+void ParallelBoostContext::initialize()
+{
+ parmap_ = nullptr;
+ workers_context_.clear();
+ workers_context_.resize(SIMIX_context_get_nthreads(), nullptr);
+ xbt_os_thread_key_create(&worker_id_key_);
+}
+
+void ParallelBoostContext::finalize()
+{
+ delete parmap_;
+ parmap_ = nullptr;
+ workers_context_.clear();
+ xbt_os_thread_key_destroy(worker_id_key_);
+}
+
+void ParallelBoostContext::run_all()
+{
+ threads_working_ = 0;
+ if (parmap_ == nullptr)
+ parmap_ = new simgrid::xbt::Parmap<smx_actor_t>(SIMIX_context_get_nthreads(), SIMIX_context_get_parallel_mode());
+ parmap_->apply(
+ [](smx_actor_t process) {
+ ParallelBoostContext* context = static_cast<ParallelBoostContext*>(process->context);
+ context->resume();
+ },
+ simix_global->process_to_run);
+}
+
+void ParallelBoostContext::suspend()