-/** Run one particular simulated process on the current thread. */
-void ParallelUContext::resume()
-{
- // What is my containing body? Store its number in os-thread-specific area :
- worker_id_ = threads_working_.fetch_add(1, std::memory_order_relaxed);
- // Get my current soul:
- ParallelUContext* worker_context = static_cast<ParallelUContext*>(self());
- // Write down that this soul is hosted in that body (for now)
- workers_context_[worker_id_] = worker_context;
- // Write in simix that I switched my soul
- Context::set_current(this);
- // Actually do that using the relevant library call:
- worker_context->swap_into(this);
- // No body runs that soul anymore at this point. Instead the current body took the soul of simulated process The
- // simulated process wakes back after the call to "SIMIX_context_suspend(self->context);" within
- // smx_process.c::SIMIX_process_yield()
-
- // From now on, the simulated processes will change their soul with the next soul to execute (in suspend_parallel,
- // below). When nobody is to be executed in this scheduling round, the last simulated process will take back the
- // initial soul of the current working thread
-}
-