X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/52bbf6abbe3dfbbd715ec4041e31fcfa2c7e453f..5089a0a98b27f5eeee62321dff4f025f1648f025:/include/simgrid/kernel/resource/Action.hpp diff --git a/include/simgrid/kernel/resource/Action.hpp b/include/simgrid/kernel/resource/Action.hpp index bde56a29e8..00ae0df8de 100644 --- a/include/simgrid/kernel/resource/Action.hpp +++ b/include/simgrid/kernel/resource/Action.hpp @@ -47,7 +47,14 @@ public: /** @details An action is a consumption on a resource (e.g.: a communication for the network). * * It is related (but still different) from activities, that are the stuff on which an actor can be blocked. - * See simgrid::s4u::Activity for more details. + * + * - A sequential execution activity encompasses 2 actions: one for the exec itself, + * and a time-limited sleep used as timeout detector. + * - A point-to-point communication activity encompasses 3 actions: one for the comm itself + * (which spans on all links of the path), and one infinite sleep used as failure detector + * on both sender and receiver hosts. + * - Synchronization activities may possibly be connected to no action. + */ class XBT_PUBLIC Action { friend ActionHeap; @@ -75,9 +82,9 @@ public: }; enum class SuspendStates { - not_suspended = 0, /**< Action currently not suspended **/ - suspended, - sleeping + RUNNING = 0, /**< Action currently not suspended **/ + SUSPENDED, + SLEEPING }; /** @@ -98,6 +105,8 @@ public: * @param var The lmm variable associated to this Action if it is part of a LMM component */ Action(Model* model, double cost, bool failed, lmm::Variable* var); + Action(const Action&) = delete; + Action& operator=(const Action&) = delete; virtual ~Action(); @@ -128,6 +137,11 @@ public: /** @brief Set the user data associated to the current action */ void set_data(void* data) { data_ = data; } + /** @brief Get the user data associated to the current action */ + activity::ActivityImpl* get_activity() const { return activity_; } + /** @brief Set the user data associated to the current action */ + void set_activity(activity::ActivityImpl* activity) { activity_ = activity; } + /** @brief Get the cost of the current action */ double get_cost() const { return cost_; } /** @brief Set the cost of the current action */ @@ -169,8 +183,10 @@ public: /** @brief Resume the current Action */ virtual void resume(); + /** @brief Returns true if the current action is suspended */ + bool is_suspended() const { return suspended_ == SuspendStates::SUSPENDED; } /** @brief Returns true if the current action is running */ - bool is_suspended(); + bool is_running() const { return suspended_ == SuspendStates::RUNNING; } /** @brief Get the maximum duration of the current action */ double get_max_duration() const { return max_duration_; } @@ -178,27 +194,26 @@ public: virtual void set_max_duration(double duration); /** @brief Get the tracing category associated to the current action */ - std::string get_category() const { return category_; } + const std::string& get_category() const { return category_; } /** @brief Set the tracing category of the current Action */ - void set_category(std::string category) { category_ = std::move(category); } + void set_category(const std::string& category) { category_ = category; } - /** @brief Get the priority of the current Action */ - double get_priority() const { return sharing_priority_; }; - /** @brief Set the priority of the current Action */ - virtual void set_priority(double priority); - void set_priority_no_update(double priority) { sharing_priority_ = priority; } + /** @brief Get the sharing_penalty (RTT or 1/thread_count) of the current Action */ + double get_sharing_penalty() const { return sharing_penalty_; }; + /** @brief Set the sharing_penalty (RTT or 1/thread_count) of the current Action */ + virtual void set_sharing_penalty(double sharing_penalty); + void set_sharing_penalty_no_update(double sharing_penalty) { sharing_penalty_ = sharing_penalty; } /** @brief Get the state set in which the action is */ StateSet* get_state_set() const { return state_set_; }; simgrid::kernel::resource::Model* get_model() const { return model_; } -protected: - StateSet* state_set_; - private: + StateSet* state_set_; + Action::SuspendStates suspended_ = Action::SuspendStates::RUNNING; int refcount_ = 1; - double sharing_priority_ = 1.0; /**< priority (1.0 by default) */ + double sharing_penalty_ = 1.0; /**< priority (1.0 by default) */ double max_duration_ = NO_MAX_DURATION; /*< max_duration (may fluctuate until the task is completed) */ double remains_; /**< How much of that cost remains to be done in the currently running task */ double start_time_; /**< start time */ @@ -207,7 +222,8 @@ private: double cost_; simgrid::kernel::resource::Model* model_; - void* data_ = nullptr; /**< for your convenience */ + void* data_ = nullptr; /**< for your convenience */ + activity::ActivityImpl* activity_ = nullptr; /* LMM */ double last_update_ = 0; @@ -228,9 +244,7 @@ public: double get_last_value() const { return last_value_; } void set_last_value(double val) { last_value_ = val; } - -protected: - Action::SuspendStates suspended_ = Action::SuspendStates::not_suspended; + void set_suspend_state(Action::SuspendStates state) { suspended_ = state; } }; } // namespace resource