X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/19e4a01d6e38e856dafa1a08942143a8ec7f5e34..c7c5def2870e604025be03b866967c0c5e293afe:/include/simgrid/s4u/Actor.hpp diff --git a/include/simgrid/s4u/Actor.hpp b/include/simgrid/s4u/Actor.hpp index e9cdd87e85..670f5022c9 100644 --- a/include/simgrid/s4u/Actor.hpp +++ b/include/simgrid/s4u/Actor.hpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -130,6 +131,7 @@ namespace s4u { /** @brief Simulation Agent */ XBT_PUBLIC_CLASS Actor : public simgrid::xbt::Extendable { + friend Exec; friend Mailbox; friend simgrid::simix::ActorImpl; friend simgrid::kernel::activity::MailboxImpl; @@ -154,13 +156,16 @@ public: Actor& operator=(Actor const&) = delete; // ***** Reference count ***** - friend void intrusive_ptr_add_ref(Actor * actor); - friend void intrusive_ptr_release(Actor * actor); + friend XBT_PUBLIC(void) intrusive_ptr_add_ref(Actor * actor); + friend XBT_PUBLIC(void) intrusive_ptr_release(Actor * actor); // ***** Actor creation ***** /** Retrieve a reference to myself */ static ActorPtr self(); + /** Signal to others that a new actor has been created **/ + static simgrid::xbt::signal onCreation; + /** Create an actor using a function * * If the actor is restarted, the actor has a fresh copy of the function. @@ -217,7 +222,9 @@ public: /** Resume a suspended actor by resuming the task on which it was waiting for the completion. */ void resume(); - + + void yield(); + /** Returns true if the actor is suspended. */ int isSuspended(); @@ -256,6 +263,7 @@ public: * This blocks the calling actor until the actor on which we call join() is terminated */ void join(); + void join(double timeout); // Static methods on all actors: @@ -267,6 +275,7 @@ public: simix::ActorImpl* getImpl(); /** Retrieve the property value (or nullptr if not set) */ + std::map* getProperties(); const char* getProperty(const char* key); void setProperty(const char* key, const char* value); Actor* restart(); @@ -302,10 +311,18 @@ XBT_ATTRIB_DEPRECATED_v320("Use sleep_for(): v3.20 will turn this warning into a /** Block the actor, computing the given amount of flops */ XBT_PUBLIC(void) execute(double flop); + /** Block the actor, computing the given amount of flops at the given priority. * An execution of priority 2 computes twice as fast as an execution at priority 1. */ XBT_PUBLIC(void) execute(double flop, double priority); +XBT_PUBLIC(void) parallel_execute(int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount); +XBT_PUBLIC(void) +parallel_execute(int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount, double timeout); + +XBT_PUBLIC(ExecPtr) exec_init(double flops_amounts); +XBT_PUBLIC(ExecPtr) exec_async(double flops_amounts); + /** Block the actor until it gets a message from the given mailbox. * * See \ref Comm for the full communication API (including non blocking communications). @@ -347,6 +364,9 @@ XBT_PUBLIC(Host*) getHost(); /** @brief Suspend the actor. */ XBT_PUBLIC(void) suspend(); +/** @brief yield the actor. */ +XBT_PUBLIC(void) yield(); + /** @brief Resume the actor. */ XBT_PUBLIC(void) resume();