X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/60087ab28ce5450ad32f128cffbb09eb492eb550..37f79c31cbc78af908f87b9e3cc15223b5a450ac:/src/simix/ContextRaw.cpp diff --git a/src/simix/ContextRaw.cpp b/src/simix/ContextRaw.cpp index 67ebc5438c..a11741f414 100644 --- a/src/simix/ContextRaw.cpp +++ b/src/simix/ContextRaw.cpp @@ -4,13 +4,6 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -/** \file RawContext.cpp - * Fast context switching inspired from SystemV ucontexts. - * - * In contrast to System V context, it does not touch the signal mask - * which avoids making a system call (at least on Linux). - */ - #include #include @@ -23,7 +16,6 @@ #include "xbt/dynar.h" #include "smx_private.h" -#include "smx_private.hpp" #include "mc/mc.h" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); @@ -36,6 +28,11 @@ namespace simix { class RawContext; class RawContextFactory; +/** @brief Fast context switching inspired from SystemV ucontexts. + * + * The main difference to the System V context is that Raw Contexts are much faster because they don't + * preserve the signal mask when switching. This saves a system call (at least on Linux) on each context switch. + */ class RawContext : public Context { protected: void* stack_ = nullptr; @@ -46,7 +43,7 @@ public: RawContext(std::function code, void_pfn_smxprocess_t cleanup_func, smx_process_t process); - ~RawContext(); + ~RawContext() override; public: static void wrapper(void* arg); void stop() override; @@ -62,9 +59,9 @@ private: class RawContextFactory : public ContextFactory { public: RawContextFactory(); - ~RawContextFactory(); + ~RawContextFactory() override; RawContext* create_context(std::function code, - void_pfn_smxprocess_t, smx_process_t process) override; + void_pfn_smxprocess_t cleanup, smx_process_t process) override; void run_all() override; private: void run_all_adaptative(); @@ -409,7 +406,7 @@ void RawContext::suspend_parallel() smx_process_t next_work = (smx_process_t) xbt_parmap_next(raw_parmap); RawContext* next_context = nullptr; - if (next_work != NULL) { + if (next_work != nullptr) { /* there is a next process to resume */ XBT_DEBUG("Run next process"); next_context = (RawContext*) next_work->context;