/* 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. */
/* 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. */
* It is located on a (simulated) :cpp:class:`host <simgrid::s4u::Host>`, but can interact
* with the whole simulated platform.
*
* You can think of an actor as a process in your distributed application, or as a thread in a multithreaded program.
* This is the only component in SimGrid that actually does something on its own, executing its own code.
* A resource will not get used if you don't schedule activities on them. This is the code of Actors that create and
* It is located on a (simulated) :cpp:class:`host <simgrid::s4u::Host>`, but can interact
* with the whole simulated platform.
*
* You can think of an actor as a process in your distributed application, or as a thread in a multithreaded program.
* This is the only component in SimGrid that actually does something on its own, executing its own code.
* A resource will not get used if you don't schedule activities on them. This is the code of Actors that create and
*
* This API is strongly inspired from the C++11 threads.
* The `documentation of this standard <http://en.cppreference.com/w/cpp/thread>`_
*
* This API is strongly inspired from the C++11 threads.
* The `documentation of this standard <http://en.cppreference.com/w/cpp/thread>`_
- friend XBT_PUBLIC void intrusive_ptr_add_ref(Actor * actor);
- friend XBT_PUBLIC void intrusive_ptr_release(Actor * actor);
+ friend XBT_PUBLIC void intrusive_ptr_add_ref(const Actor* actor);
+ friend XBT_PUBLIC void intrusive_ptr_release(const Actor* actor);
static xbt::signal<void(Actor const&)> on_sleep;
/** Signal to others that an actor wakes up for a sleep **/
static xbt::signal<void(Actor const&)> on_wake_up;
static xbt::signal<void(Actor const&)> on_sleep;
/** Signal to others that an actor wakes up for a sleep **/
static xbt::signal<void(Actor const&)> on_wake_up;
- static xbt::signal<void(Actor const&)> on_migration_end;
+ static xbt::signal<void(Actor const&, Host const& previous_location)> on_host_change;
+#ifndef DOXYGEN
+ static xbt::signal<void(Actor const&)> on_migration_start; // XBT_ATTRIB_DEPRECATED_v329
+ static xbt::signal<void(Actor const&)> on_migration_end; // XBT_ATTRIB_DEPRECATED_v329
+#endif
+
- * If you want to free extra data when the actor's destructor is called, use Actor::on_destruction.
- * If you want to register to the termination of a given actor, use this_actor::on_exit() instead.*/
+ * If you want to free extra data when the actor's destructor is called, use :cpp:var:`Actor::on_destruction`.
+ * If you want to register to the termination of a given actor, use :cpp:func:`this_actor::on_exit()` instead.
+ * @endrst
+ */
static xbt::signal<void(Actor const&)> on_termination;
/** Signal indicating that an actor is about to disappear (its destructor was called).
* This signal is fired for any destructed actor, which is mostly useful when designing plugins and extensions.
static xbt::signal<void(Actor const&)> on_termination;
/** Signal indicating that an actor is about to disappear (its destructor was called).
* This signal is fired for any destructed actor, which is mostly useful when designing plugins and extensions.
static ActorPtr create(const std::string& name, s4u::Host* host, const std::function<void()>& code);
/** Create an actor, but don't start it yet.
*
static ActorPtr create(const std::string& name, s4u::Host* host, const std::function<void()>& code);
/** Create an actor, but don't start it yet.
*
/** If set to true, the actor will automatically restart when its host reboots */
void set_auto_restart(bool autorestart);
/** If set to true, the actor will automatically restart when its host reboots */
void set_auto_restart(bool autorestart);
/** Sets the time at which that actor should be killed */
void set_kill_time(double time);
/** Retrieves the time at which that actor will be killed (or -1 if not set) */
/** Sets the time at which that actor should be killed */
void set_kill_time(double time);
/** Retrieves the time at which that actor will be killed (or -1 if not set) */
* Asynchronous activities started by the actor are not migrated automatically, so you have
* to take care of this yourself (only you knows which ones should be migrated).
*/
* Asynchronous activities started by the actor are not migrated automatically, so you have
* to take care of this yourself (only you knows which ones should be migrated).
*/
* vector means that `host0` should compute 1000 flops while `host1` will compute 2000 flops. A matrix of
* communications' sizes of ``[0, 1, 2, 3]`` specifies the following data exchanges:
*
* vector means that `host0` should compute 1000 flops while `host1` will compute 2000 flops. A matrix of
* communications' sizes of ``[0, 1, 2, 3]`` specifies the following data exchanges:
*
- * +-----------+-------+------+
- * |from \\ to | host0 | host1|
- * +===========+=======+======+
- * |host0 | 0 | 1 |
- * +-----------+-------+------+
- * |host1 | 2 | 3 |
- * +-----------+-------+------+
+ * - from host0: [ to host0: 0 bytes; to host1: 1 byte ]
+ *
+ * - from host1: [ to host0: 2 bytes; to host1: 3 bytes ]
+ *
+ * Or, in other words:
* - From host1 to host1: 3 bytes are exchanged
*
* In a parallel execution, all parts (all executions on each hosts, all communications) progress exactly at the
* - From host1 to host1: 3 bytes are exchanged
*
* In a parallel execution, all parts (all executions on each hosts, all communications) progress exactly at the
XBT_PUBLIC void parallel_execute(const std::vector<s4u::Host*>& hosts, const std::vector<double>& flops_amounts,
const std::vector<double>& bytes_amounts);
XBT_PUBLIC void parallel_execute(const std::vector<s4u::Host*>& hosts, const std::vector<double>& flops_amounts,
const std::vector<double>& bytes_amounts);
-/** Block the current actor until the built parallel execution completes, or until the timeout. */
-XBT_PUBLIC void parallel_execute(const std::vector<s4u::Host*>& hosts, const std::vector<double>& flops_amounts,
- const std::vector<double>& bytes_amounts, double timeout);
+XBT_ATTRIB_DEPRECATED_v329("Please use exec_init(...)->wait_for(timeout)") XBT_PUBLIC
+ void parallel_execute(const std::vector<s4u::Host*>& hosts, const std::vector<double>& flops_amounts,
+ const std::vector<double>& bytes_amounts, double timeout);
/** Initialize a sequential execution that must then be started manually */
XBT_PUBLIC ExecPtr exec_init(double flops_amounts);
/** Initialize a sequential execution that must then be started manually */
XBT_PUBLIC ExecPtr exec_init(double flops_amounts);
* blocking functions forbidden in this setting, but also modifications to the global state.
*
* The parameter of on_exit's callbacks denotes whether or not the actor's execution failed.
* blocking functions forbidden in this setting, but also modifications to the global state.
*
* The parameter of on_exit's callbacks denotes whether or not the actor's execution failed.
* while it will remain to false if the actor terminated gracefully.
*/
XBT_PUBLIC void on_exit(const std::function<void(bool)>& fun);
/** @brief Migrate the current actor to a new host. */
* while it will remain to false if the actor terminated gracefully.
*/
XBT_PUBLIC void on_exit(const std::function<void(bool)>& fun);
/** @brief Migrate the current actor to a new host. */