Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix some warnings in doc generation.
[simgrid.git] / docs / source / app_s4u.rst
1 .. _S4U_doc:
2
3 The S4U Interface
4 #################
5
6 .. raw:: html
7
8    <object id="TOC" data="graphical-toc.svg" type="image/svg+xml"></object>
9    <script>
10    window.onload=function() { // Wait for the SVG to be loaded before changing it
11      var elem=document.querySelector("#TOC").contentDocument.getElementById("ActorBox")
12      elem.style="opacity:0.93999999;fill:#ff0000;fill-opacity:0.1;stroke:#000000;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1";
13    }
14    </script>
15    <br/>
16    <br/>
17
18 The S4U interface (SimGrid for you) mixes the full power of SimGrid
19 with the full power of C++. This is the preferred interface to describe
20 abstract algorithms in the domains of Cloud, P2P, HPC, IoT, and similar
21 settings.
22
23 Since v3.20 (June 2018), S4U is the way to go for long-term
24 projects. It is feature complete, but may still evolve slightly in
25 future releases. It can already be used to do everything that can be
26 done in SimGrid, but you may have to adapt your code in future
27 releases. When this happens, compiling your code will produce
28 deprecation warnings for 4 releases (one year) before the removal of
29 the old symbols.
30 If you want an API that will never ever evolve in the future, you
31 should use the :ref:`deprecated MSG API <MSG_doc>` instead.
32
33 Main Concepts
34 *************
35
36 A typical SimGrid simulation is composed of several |API_s4u_Actors|_, that
37 execute user-provided functions. The actors have to explicitly use the
38 S4U interface to express their :ref:`computation <API_s4u_Exec>`,
39 :ref:`communication <API_s4u_Comm>`, :ref:`disk usage <API_s4u_Io>`,
40 and other |API_s4u_Activities|_, so that they get reflected within the
41 simulator. These activities take place on resources such as |API_s4u_Hosts|_,
42 |API_s4u_Links|_, and |API_s4u_Disks|_. SimGrid predicts the time taken by each
43 activity and orchestrates the actors accordingly, waiting for the
44 completion of these activities.
45
46
47 When **communicating**, data is not directly sent to other actors but
48 posted onto a |API_s4u_Mailbox|_ that serves as a rendezvous point between
49 communicating actors. This means that you don't need to know who you
50 are talking to, you just put your communication `Put` request in a
51 mailbox, and it will be matched with a complementary `Get`
52 request.  Alternatively, actors can interact through **classical
53 synchronization mechanisms** such as |API_s4u_Barrier|_, |API_s4u_Semaphore|_,
54 |API_s4u_Mutex|_, and |API_s4u_ConditionVariable|_.
55
56 Each actor is located on a simulated |API_s4u_Host|_. Each host is located
57 in a |API_s4u_NetZone|_, that knows the networking path between one
58 resource to another. Each NetZone is included in another one, forming
59 a tree of NetZones which root zone contains the whole platform. The
60 actors can also be located on a |API_s4U_VirtualMachine|_ that may
61 restrict the activities it contains to a limited amount of cores.
62 Virtual machines can also be migrated between hosts.
63
64 The :ref:`simgrid::s4u::this_actor <API_s4u_this_actor>` namespace
65 provides many helper functions to simplify the code of actors.
66
67 .. rst-class:: compact-list
68
69    - **Simulation Elements**
70
71       - :ref:`class Actor <API_s4u_Actor>`: Active entities executing your application.
72       - :ref:`class Engine <API_s4u_Engine>`: Simulation engine (singleton).
73       - :ref:`class Mailbox <API_s4u_Mailbox>`: Communication rendezvous, with which actors meet each other.
74
75    - **Resources**
76
77       - :ref:`class Disk <API_s4u_Disk>`: Resource on which actors can write and read data.
78       - :ref:`class Host <API_s4u_Host>`: Actor location, providing computational power.
79       - :ref:`class Link <API_s4u_Link>`: Interconnecting hosts.
80       - :ref:`class NetZone <API_s4u_NetZone>`: Sub-region of the platform, containing resources (Hosts, Links, etc).
81       - :ref:`class VirtualMachine <API_s4u_VirtualMachine>`: Execution containers that can be moved between Hosts.
82
83    - **Activities** (:ref:`class Activity <API_s4u_Activity>`): The things that actors can do on resources.
84
85       - :ref:`class Comm <API_s4u_Comm>`: Communication activity, started on Mailboxes and consuming links.
86       - :ref:`class Exec <API_s4u_Exec>`: Computation activity, started on Host and consuming CPU resources.
87       - :ref:`class Io <API_s4u_Io>`: I/O activity, started on and consuming disks.
88
89    - **Synchronization Objects**: Classical IPC that actors can use
90
91       - :ref:`class Barrier <API_s4u_Barrier>`
92       - :ref:`class ConditionVariable <API_s4u_ConditionVariable>`
93       - :ref:`class Mutex <API_s4u_Mutex>`
94       - :ref:`class Semaphore <API_s4u_Semaphore>`
95
96 .. |API_s4u_Actors| replace:: **Actors**
97 .. _API_s4u_Actors: #api-s4u-actor
98
99 .. |API_s4u_Activities| replace:: **Activities**
100 .. _API_s4u_Activities: #api-s4u-activity
101
102 .. |API_s4u_Hosts| replace:: **Hosts**
103 .. _API_s4u_Hosts: #api-s4u-host
104
105 .. |API_s4u_Links| replace:: **Links**
106 .. _API_s4u_Links: #api-s4u-link
107
108 .. |API_s4u_Disks| replace:: **Disks**
109 .. _API_s4u_Disks: #api-s4u-disk
110
111 .. |API_s4u_VirtualMachine| replace:: **VirtualMachines**
112
113 .. |API_s4u_Host| replace:: **Host**
114
115 .. |API_s4u_Mailbox| replace:: **Mailbox**
116
117 .. |API_s4u_Mailboxes| replace:: **Mailboxes**
118 .. _API_s4u_Mailboxes: #s4u-mailbox
119
120 .. |API_s4u_NetZone| replace:: **NetZone**
121
122 .. |API_s4u_Barrier| replace:: **Barrier**
123
124 .. |API_s4u_Semaphore| replace:: **Semaphore**
125
126 .. |API_s4u_ConditionVariable| replace:: **ConditionVariable**
127
128 .. |API_s4u_Mutex| replace:: **Mutex**
129
130 .. _s4u_Activities:
131
132 Activities
133 **********
134
135 Activities represent the actions that consume a resource, such as a
136 :ref:`Comm <API_s4u_Comm>` that consumes the *transmitting power* of
137 :ref:`Link <API_s4u_Link>` resources, or an :ref:`Exec <API_s4u_Exec>`
138 that consumes the *computing power* of :ref:`Host <API_s4u_Host>` resources.
139 See also the :ref:`full API <API_s4u_Activity>` below.
140
141 =======================
142 Asynchronous Activities
143 =======================
144
145 Every activity can be either **blocking** or **asynchronous**. For
146 example, :cpp:func:`s4u::Mailbox::put() <simgrid::s4u::Mailbox::put>`
147 and :cpp:func:`s4u::Mailbox::get() <simgrid::s4u::Mailbox::get>`
148 create blocking communications: the actor is blocked until the
149 completion of that communication. Asynchronous communications do not
150 block the actor during their execution but progress on their own.
151
152 Once your asynchronous activity is started, you can test for its
153 completion using :cpp:func:`s4u::Activity::test() <simgrid::s4u::Activity::test>`.
154 This function returns ``true`` if the activity is completed already.
155 You can also use :cpp:func:`s4u::Activity::wait() <simgrid::s4u::Activity::wait>`
156 to block until the completion of the activity. To wait for at most a given amount of time,
157 use  :cpp:func:`s4u::Activity::wait_for() <simgrid::s4u::Activity::wait_for>`.
158 Finally, to wait at most until a specified time limit, use
159 :cpp:func:`s4u::Activity::wait_until() <simgrid::s4u::Activity::wait_until>`.
160
161 Every kind of activity can be asynchronous.
162 :ref:`s4u::CommPtr <API_s4u_Comm>` are created with :cpp:func:`s4u::Mailbox::put_async() <simgrid::s4u::Mailbox::put_async>` and
163 :cpp:func:`s4u::Mailbox::get_async() <simgrid::s4u::Mailbox::get_async>`;
164 :ref:`s4u::IoPtr <API_s4u_Io>` are created with :cpp:func:`s4u::Disk::read_async() <simgrid::s4u::Disk::read_async>` and
165 :cpp:func:`s4u::Disk::write_async() <simgrid::s4u::Disk::write_async>`; and
166 :ref:`s4u::ExecPtr <API_s4u_Exec>` are created with
167 :cpp:func:`s4u::Host::exec_async() <simgrid::s4u::Host::exec_async>`.
168 In the future, it will become possible to have asynchronous IPC such as asynchronous mutex lock requests.
169
170 The following example shows how to have several concurrent
171 communications ongoing.  First, you have to declare a vector in which
172 we will store the ongoing communications. It is also useful to have a
173 vector of mailboxes.
174
175 .. literalinclude:: ../../examples/cpp/comm-waitall/s4u-comm-waitall.cpp
176    :language: c++
177    :start-after: init-begin
178    :end-before: init-end
179    :dedent: 2
180
181 Then, you start all the communications that should occur concurrently with
182 :cpp:func:`s4u::Mailbox::put_async() <simgrid::s4u::Mailbox::put_async>`.
183 Finally, the actor waits for the completion of all of them at once
184 with :cpp:func:`s4u::Comm::wait_all() <simgrid::s4u::Comm::wait_all>`.
185
186 .. literalinclude:: ../../examples/cpp/comm-waitall/s4u-comm-waitall.cpp
187    :language: c++
188    :start-after: put-begin
189    :end-before: put-end
190    :dedent: 2
191
192 =====================
193 Activities Life cycle
194 =====================
195
196 Sometimes, you want to change the setting of an activity before it even starts.
197
198 .. todo:: write this section
199
200 .. _s4u_mailbox:
201
202 Mailboxes
203 *********
204
205 Please also refer to the :ref:`API reference for s4u::Mailbox
206 <API_s4u_Mailbox>`.
207
208 ===================
209 What are Mailboxes?
210 ===================
211
212 |API_s4u_Mailboxes|_ are rendezvous points for network communications,
213 similar to URLs on which you could post and retrieve data. Actually,
214 the mailboxes are not involved in the communication once it starts,
215 but only to find the contact with which you want to communicate.
216
217 They are similar to many common things: The phone number, which allows
218 the caller to find the receiver. The Twitter hashtag, which helps
219 senders and receivers to find each other. In TCP, the pair
220 ``{host name, host port}`` to which you can connect to find your peer.
221 In HTTP, URLs through which the clients can connect to the servers.
222 In ZeroMQ, the queues are used to match senders and receivers.
223
224 One big difference with most of these systems is that no actor is the
225 exclusive owner of a mailbox, neither in sending nor in receiving.
226 Many actors can send into and/or receive from the same mailbox.  TCP
227 socket ports for example are shared on the sender side but exclusive
228 on the receiver side (only one process can receive from a given socket
229 at a given point of time).
230
231 A big difference with TCP sockets or MPI communications is that
232 communications do not start right away after a
233 :cpp:func:`Mailbox::put() <simgrid::s4u::Mailbox::put>`, but wait
234 for the corresponding :cpp:func:`Mailbox::get() <simgrid::s4u::Mailbox::get>`.
235 You can change this by :ref:`declaring a receiving actor <s4u_receiving_actor>`.
236
237 A big difference with Twitter hashtags is that SimGrid does not
238 offer easy support to broadcast a given message to many
239 receivers. So that would be like a Twitter tag where each message
240 is consumed by the first receiver.
241
242 A big difference with the ZeroMQ queues is that you cannot filter
243 on the data you want to get from the mailbox. To model such settings
244 in SimGrid, you'd have one mailbox per potential topic, and subscribe
245 to each topic individually with a
246 :cpp:func:`get_async() <simgrid::s4u::Mailbox::get_async>` on each mailbox.
247 Then, use :cpp:func:`Comm::wait_any() <simgrid::s4u::Comm::wait_any>`
248 to get the first message on any of the mailboxes you are subscribed to.
249
250 The mailboxes are not located on the network, and you can access
251 them without any latency. The network delays are only related to the
252 location of the sender and receiver once the match between them is
253 done on the mailbox. This is just like the phone number that you
254 can use locally, and the geographical distance only comes into play
255 once you start the communication by dialing this number.
256
257 =====================
258 How to use Mailboxes?
259 =====================
260
261 You can retrieve any existing mailbox from its name (which is a
262 unique string, just like a Twitter tag). This results in a
263 versatile tool that can be used to build many different
264 situations.
265
266 To model classical socket communications, use "hostname:port" as
267 mailbox names, and make sure that only one actor reads into a given
268 mailbox. This does not make it easy to build a perfectly realistic
269 model of the TCP sockets, but in most cases, this system is too
270 cumbersome for your simulations anyway. You probably want something
271 simpler, that turns out to be easy to build with the mailboxes.
272
273 Many SimGrid examples use a sort of yellow page system where the
274 mailbox names are the name of the service (such as "worker",
275 "master", or "reducer"). That way, you don't have to know where your
276 peer is located to contact it. You don't even need its name. Its
277 function is enough for that. This also gives you some sort of load
278 balancing for free if more than one actor pulls from the mailbox:
279 the first actor that can deal with the request will handle it.
280
281 =========================================
282 How are put() and get() requests matched?
283 =========================================
284
285 The matching algorithm simple: first come, first serve. When a new
286 send arrives, it matches the oldest enqueued receive. If no receive is
287 currently enqueued, then the incoming send is enqueued. As you can
288 see, the mailbox cannot contain both send and receive requests: all
289 enqueued requests must be of the same sort.
290
291 .. _s4u_receiving_actor:
292
293 ===========================
294 Declaring a Receiving Actor
295 ===========================
296
297 The last twist is that by default in the simulator, the data starts
298 to be exchanged only when both the sender and the receiver are
299 announced (it waits until both :cpp:func:`put() <simgrid::s4u::Mailbox::put()>`
300 and :cpp:func:`get() <simgrid::s4u::Mailbox::get()>` are posted).
301 In TCP, since you establish connections beforehand, the data starts to
302 flow as soon as the sender posts it, even if the receiver did not post
303 its :cpp:func:`put() <simgrid::s4u::Mailbox::put()>` yet.
304
305 To model this in SimGrid, you can declare a specific receiver to a
306 given mailbox (with the function
307 :cpp:func:`set_receiver() <simgrid::s4u::Mailbox::set_receiver()>`).
308 That way, any :cpp:func:`put() <simgrid::s4u::Mailbox::put()>`
309 posted to that mailbox will start as soon as possible, and the data
310 will already be there on the receiver host when the receiver actor
311 posts its :cpp:func:`get() <simgrid::s4u::Mailbox::get()>`
312
313 Note that being permanent receivers of a mailbox prevents actors to be
314 garbage-collected. If your simulation creates many short-lived actors
315 that are marked as permanent receiver, you should call
316 ``mailbox->set_receiver(nullptr)`` by the end of the actors so that their
317 memory gets properly reclaimed. This call should be at the end of the
318 actor's function, not in an on_exit callback.
319
320 ===============================
321 Communicating without Mailboxes
322 ===============================
323
324 Sometimes you don't want to simulate communications between actors as
325 allowed by mailboxes, but you want to create a direct communication
326 between two arbitrary hosts. This can arise when you write a
327 high-level model of a centralized scheduler, or when you model direct
328 communications such as one-sided communications in MPI or remote
329 memory direct access in PGAS.
330
331 For that, :cpp:func:`Comm::sendto() <simgrid::s4u::Comm::sendto()>`
332 simulates a direct communication between the two specified hosts. No
333 mailbox is used, and there is no rendezvous between actors. You can
334 freely mix such direct communications and rendezvous-based
335 communications. Alternatively, :cpp:func:`Comm::sendto_init()
336 <simgrid::s4u::Comm::sendto_init()>` and
337 :cpp:func:`Comm::sendto_async() <simgrid::s4u::Comm::sendto_async()>`
338 create asynchronous direct communications.
339
340 .. _s4u_raii:
341
342 Memory Management
343 *****************
344
345 For sake of simplicity, we use `RAII
346 <https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization>`_
347 for many classes in S4U. This is an idiom where resources are automatically
348 managed through the context. Provided that you never manipulate
349 objects of type Foo directly but always FooPtr references (which are
350 defined as `boost::intrusive_ptr
351 <http://www.boost.org/doc/libs/1_61_0/libs/smart_ptr/intrusive_ptr.html>`_
352 <Foo>), you will never have to explicitly release the resource that
353 you use nor to free the memory of unused objects.
354 Here is a little example:
355
356 .. code-block:: cpp
357
358    void myFunc()
359    {
360      simgrid::s4u::MutexPtr mutex = simgrid::s4u::Mutex::create(); // Too bad we cannot use `new`
361
362      mutex->lock();   // use the mutex as a simple reference
363      //  bla bla
364      mutex->unlock();
365
366    } // The mutex gets automatically freed because the only existing reference gets out of scope
367
368 Note that Mailboxes, Hosts, and Links are not handled through smart
369 pointers (yet?). This means that it is currently impossible to destroy a
370 mailbox or a link. You can still destroy a host (but probably
371 shouldn't), using :cpp:func:`simgrid::s4u::Host::destroy`.
372
373 .. THE EXAMPLES
374
375 .. include:: ../../examples/README.rst
376
377 API Reference
378 *************
379
380 .. _API_s4u_simulation_object:
381
382 ==================
383 Simulation objects
384 ==================
385
386 .. _API_s4u_Actor:
387
388 ==============
389 ⁣  class Actor
390 ==============
391
392 .. tabs::
393
394    .. group-tab:: C++
395
396       .. doxygenclass:: simgrid::s4u::Actor
397
398       .. doxygentypedef:: aid_t
399
400
401    .. group-tab:: Python
402    
403       .. autoclass:: simgrid.Actor
404
405 Basic management
406 ----------------
407
408 .. tabs::
409
410    .. group-tab:: C++
411
412       .. code:: C++
413
414          #include <simgrid/s4u/Actor.hpp>
415
416       .. doxygentypedef:: ActorPtr
417
418    .. group-tab:: Python
419
420       .. code:: Python
421
422          from simgrid import Actor
423
424    .. group-tab:: C
425
426       .. code:: C
427
428          #include <simgrid/actor.h>
429
430       .. doxygentypedef:: sg_actor_t
431       .. doxygentypedef:: const_sg_actor_t
432       .. doxygenfunction:: sg_actor_ref
433       .. doxygenfunction:: sg_actor_unref
434
435
436 Creating actors
437 ---------------
438
439 See also :ref:`the relevant example <s4u_ex_actors_create>`.
440
441 .. tabs::
442
443    .. group-tab:: C++
444
445       .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, const std::function< void()> &code)
446       .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, F code)
447       .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, F code, Args... args)
448       .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, const std::string &function, std::vector< std::string > args)
449
450       .. doxygenfunction:: simgrid::s4u::Actor::init(const std::string &name, s4u::Host *host)
451       .. doxygenfunction:: simgrid::s4u::Actor::start(const std::function< void()> &code)
452       .. doxygenfunction:: simgrid::s4u::Actor::set_stacksize
453
454    .. group-tab:: Python
455
456       .. automethod:: simgrid.Actor.create
457
458    .. group-tab:: C
459
460       .. doxygenfunction:: sg_actor_create(const char *name, sg_host_t host, xbt_main_func_t code, int argc, char *const *argv)
461       .. doxygenfunction:: sg_actor_init(const char *name, sg_host_t host)
462       .. doxygenfunction:: sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char *const *argv)
463       .. doxygenfunction:: sg_actor_set_stacksize
464
465       .. doxygenfunction:: sg_actor_attach(const char *name, void *data, sg_host_t host, xbt_dict_t properties)
466       .. doxygenfunction:: sg_actor_detach()
467
468 Retrieving actors
469 -----------------
470
471 .. tabs::
472
473    .. group-tab:: C++
474
475       .. doxygenfunction:: simgrid::s4u::Actor::by_pid(aid_t pid)
476       .. doxygenfunction:: simgrid::s4u::Actor::self()
477
478    .. group-tab:: Python
479
480       .. automethod:: simgrid.Actor.by_pid
481       .. automethod:: simgrid.Actor.self
482
483    .. group-tab:: C
484
485       .. doxygenfunction:: sg_actor_by_pid(aid_t pid)
486       .. doxygenfunction:: sg_actor_self()
487       .. doxygenfunction:: sg_actor_list()
488
489 Querying info
490 -------------
491
492 .. tabs::
493
494    .. group-tab:: C++
495
496       .. doxygenfunction:: simgrid::s4u::Actor::get_cname
497       .. doxygenfunction:: simgrid::s4u::Actor::get_name
498       .. doxygenfunction:: simgrid::s4u::Actor::get_pid
499       .. doxygenfunction:: simgrid::s4u::Actor::get_ppid
500       .. doxygenfunction:: simgrid::s4u::Actor::get_properties() const
501       .. doxygenfunction:: simgrid::s4u::Actor::get_property(const std::string &key) const
502       .. doxygenfunction:: simgrid::s4u::Actor::set_property(const std::string &key, const std::string &value)
503
504       .. doxygenfunction:: simgrid::s4u::Actor::get_host
505       .. doxygenfunction:: simgrid::s4u::Actor::set_host
506
507       .. doxygenfunction:: simgrid::s4u::Actor::get_refcount
508       .. doxygenfunction:: simgrid::s4u::Actor::get_impl
509
510    .. group-tab:: Python
511
512       .. autoattribute:: simgrid.Actor.name
513       .. autoattribute:: simgrid.Actor.host
514       .. autoattribute:: simgrid.Actor.pid
515       .. autoattribute:: simgrid.Actor.ppid
516
517    .. group-tab:: C
518
519       .. doxygenfunction:: sg_actor_get_name(const_sg_actor_t actor)
520       .. doxygenfunction:: sg_actor_get_pid(const_sg_actor_t actor)
521       .. doxygenfunction:: sg_actor_get_ppid(const_sg_actor_t actor)
522       .. doxygenfunction:: sg_actor_get_properties(const_sg_actor_t actor)
523       .. doxygenfunction:: sg_actor_get_property_value(const_sg_actor_t actor, const char *name)
524
525       .. doxygenfunction:: sg_actor_get_host(const_sg_actor_t actor)
526       .. doxygenfunction:: sg_actor_set_host(sg_actor_t actor, sg_host_t host)
527
528       .. doxygenfunction:: sg_actor_get_data(const_sg_actor_t actor)
529       .. doxygenfunction:: sg_actor_set_data(sg_actor_t actor, void *userdata)
530
531 Suspending and resuming actors
532 ------------------------------
533
534 .. tabs::
535
536    .. group-tab:: C++
537
538       .. doxygenfunction:: simgrid::s4u::Actor::suspend()
539       .. doxygenfunction:: simgrid::s4u::Actor::resume()
540       .. doxygenfunction:: simgrid::s4u::Actor::is_suspended
541
542    .. group-tab:: Python
543
544       .. automethod:: simgrid.Actor.resume
545       .. automethod:: simgrid.Actor.suspend
546       .. automethod:: simgrid.Actor.is_suspended
547
548    .. group-tab:: C
549
550       .. doxygenfunction:: sg_actor_suspend(sg_actor_t actor)
551       .. doxygenfunction:: sg_actor_resume(sg_actor_t actor)
552       .. doxygenfunction:: sg_actor_is_suspended(const_sg_actor_t actor)
553
554 Specifying when actors should terminate
555 ---------------------------------------
556
557 .. tabs::
558
559    .. group-tab:: C++
560
561       .. doxygenfunction:: simgrid::s4u::Actor::kill()
562       .. doxygenfunction:: simgrid::s4u::Actor::kill_all()
563       .. doxygenfunction:: simgrid::s4u::Actor::set_kill_time(double time)
564       .. doxygenfunction:: simgrid::s4u::Actor::get_kill_time
565
566       .. doxygenfunction:: simgrid::s4u::Actor::restart()
567       .. doxygenfunction:: simgrid::s4u::Actor::daemonize()
568       .. doxygenfunction:: simgrid::s4u::Actor::is_daemon
569
570    .. group-tab:: Python
571
572       .. automethod:: simgrid.Actor.kill
573       .. automethod:: simgrid.Actor.kill_all
574
575       .. automethod:: simgrid.Actor.daemonize
576       .. automethod:: simgrid.Actor.is_daemon
577
578    .. group-tab:: C
579
580       .. doxygenfunction:: sg_actor_kill(sg_actor_t actor)
581       .. doxygenfunction:: sg_actor_kill_all()
582       .. doxygenfunction:: sg_actor_set_kill_time(sg_actor_t actor, double kill_time)
583
584       .. doxygenfunction:: sg_actor_restart(sg_actor_t actor)
585       .. doxygenfunction:: sg_actor_daemonize(sg_actor_t actor)
586       .. doxygenfunction:: sg_actor_is_daemon
587
588 .. _API_s4u_Actor_end:
589
590 Reacting to the end of actors
591 -----------------------------
592
593 .. tabs::
594
595    .. group-tab:: C++
596
597       .. doxygenfunction:: simgrid::s4u::Actor::on_exit
598       .. doxygenfunction:: simgrid::s4u::Actor::join() const
599       .. doxygenfunction:: simgrid::s4u::Actor::join(double timeout) const
600       .. doxygenfunction:: simgrid::s4u::Actor::set_auto_restart(bool autorestart)
601       .. doxygenfunction:: simgrid::s4u::Actor::get_restart_count
602
603    .. group-tab:: Python
604
605       .. automethod:: simgrid.Actor.join
606
607    .. group-tab:: C
608
609       .. doxygenfunction:: sg_actor_on_exit
610       .. doxygenfunction:: sg_actor_join(const_sg_actor_t actor, double timeout)
611       .. doxygenfunction:: sg_actor_set_auto_restart(sg_actor_t actor, int auto_restart)
612
613 Signals
614 -------
615
616 .. tabs::
617
618    .. group-tab:: C++
619
620       .. doxygenfunction:: simgrid::s4u::Actor::on_creation_cb
621       .. doxygenfunction:: simgrid::s4u::Actor::on_suspend_cb
622       .. doxygenfunction:: simgrid::s4u::Actor::on_host_change_cb
623       .. doxygenfunction:: simgrid::s4u::Actor::on_resume_cb
624       .. doxygenfunction:: simgrid::s4u::Actor::on_sleep_cb
625       .. doxygenfunction:: simgrid::s4u::Actor::on_wake_up_cb
626       .. doxygenfunction:: simgrid::s4u::Actor::on_termination_cb
627       .. doxygenfunction:: simgrid::s4u::Actor::on_destruction_cb
628
629 .. _API_s4u_this_actor:
630
631 ====================
632 ⁣  The current actor
633 ====================
634
635 These functions can be used in your user code to interact with the actor
636 currently running (the one retrieved with :cpp:func:`simgrid::s4u::Actor::self`).
637 Using these functions can greatly improve the code readability.
638
639 Querying info
640 -------------
641
642 .. tabs::
643
644    .. group-tab:: C++
645
646       .. doxygenfunction:: simgrid::s4u::this_actor::get_cname()
647       .. doxygenfunction:: simgrid::s4u::this_actor::get_name()
648       .. doxygenfunction:: simgrid::s4u::this_actor::get_pid()
649       .. doxygenfunction:: simgrid::s4u::this_actor::get_ppid()
650       .. doxygenfunction:: simgrid::s4u::this_actor::is_maestro()
651
652       .. doxygenfunction:: simgrid::s4u::this_actor::get_host()
653       .. doxygenfunction:: simgrid::s4u::this_actor::set_host(Host *new_host)
654
655    .. group-tab:: Python
656
657       .. autofunction:: simgrid.this_actor.get_host
658       .. autofunction:: simgrid.this_actor.set_host
659
660       .. autofunction:: simgrid.this_actor.get_pid
661       .. autofunction:: simgrid.this_actor.get_ppid
662
663    .. group-tab:: C
664
665       .. doxygenfunction:: sg_actor_self_get_data()
666       .. doxygenfunction:: sg_actor_self_set_data(void *data)
667       .. doxygenfunction:: sg_actor_self_get_name()
668       .. doxygenfunction:: sg_actor_self_get_pid()
669       .. doxygenfunction:: sg_actor_self_get_ppid()
670       .. doxygenfunction:: sg_host_self()
671       .. doxygenfunction:: sg_host_self_get_name()
672
673 Suspending and resuming
674 -----------------------
675
676 .. tabs::
677
678    .. group-tab:: C++
679
680       .. doxygenfunction:: simgrid::s4u::this_actor::suspend()
681       .. doxygenfunction:: simgrid::s4u::this_actor::yield()
682
683    .. group-tab:: Python
684
685       .. autofunction:: simgrid.this_actor.suspend
686       .. autofunction:: simgrid.this_actor.yield_
687
688    .. group-tab:: C
689
690       .. doxygenfunction:: sg_actor_yield()
691
692 Logging messages
693 ----------------
694
695 .. tabs::
696
697    .. group-tab:: C++
698
699       Please refer to :ref:`the relevant documentation <logging_prog>`.
700
701    .. group-tab:: Python
702
703        .. autofunction:: simgrid.this_actor.debug
704        .. autofunction:: simgrid.this_actor.info
705        .. autofunction:: simgrid.this_actor.warning
706        .. autofunction:: simgrid.this_actor.error
707
708 Sleeping
709 --------
710
711 .. tabs::
712
713    .. group-tab:: C++
714
715       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(double duration)
716       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(std::chrono::duration< Rep, Period > duration)
717       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(const SimulationTimePoint< Duration > &wakeup_time)
718       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(double wakeup_time)
719
720    .. group-tab:: Python
721
722       .. autofunction:: simgrid.this_actor.sleep_for
723       .. autofunction:: simgrid.this_actor.sleep_until
724
725    .. group-tab:: C
726
727       .. doxygenfunction:: sg_actor_sleep_for(double duration)
728
729 Simulating executions
730 ---------------------
731
732 Simulate the execution of some code on this actor. You can either simulate
733 parallel or sequential code and you can either block upon the termination of
734 the execution, or start an asynchronous activity.
735
736 .. tabs::
737
738    .. group-tab:: C++
739
740       .. doxygenfunction:: simgrid::s4u::this_actor::exec_async
741       .. doxygenfunction:: simgrid::s4u::this_actor::exec_init(const std::vector< s4u::Host * > &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts)
742       .. doxygenfunction:: simgrid::s4u::this_actor::exec_init(double flops_amounts)
743       .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop)
744       .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop, double priority)
745       .. doxygenfunction:: simgrid::s4u::this_actor::parallel_execute(const std::vector< s4u::Host * > &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts)
746       .. doxygenfunction:: simgrid::s4u::this_actor::thread_execute
747
748    .. group-tab:: Python
749
750       .. autofunction:: simgrid.this_actor.exec_async
751       .. autofunction:: simgrid.this_actor.exec_init
752       .. autofunction:: simgrid.this_actor.execute
753
754    .. group-tab:: C
755
756       .. doxygenfunction:: sg_actor_execute(double flops)
757       .. doxygenfunction:: sg_actor_execute_with_priority(double flops, double priority)
758       .. doxygenfunction:: sg_actor_exec_init(double computation_amount)
759       .. doxygenfunction:: sg_actor_exec_async(double computation_amount)
760       .. doxygenfunction:: sg_actor_parallel_exec_init(int host_nb, const sg_host_t* host_list, double* flops_amount, double* bytes_amount);
761
762 Exiting
763 -------
764
765 .. tabs::
766
767    .. group-tab:: C++
768
769       .. doxygenfunction:: simgrid::s4u::this_actor::exit()
770       .. doxygenfunction:: simgrid::s4u::this_actor::on_exit(const std::function< void(bool)> &fun)
771
772    .. group-tab:: Python
773
774       .. autofunction:: simgrid.this_actor.exit
775       .. autofunction:: simgrid.this_actor.on_exit
776
777    .. group-tab:: c
778
779       See also :cpp:func:`sg_actor_on_exit`.
780
781       .. doxygenfunction:: sg_actor_exit
782
783 .. _API_s4u_Engine:
784
785 ====================
786 ⁣  Simulation Engine
787 ====================
788
789 .. tabs::
790
791    .. group-tab:: C++
792
793       .. doxygenclass:: simgrid::s4u::Engine
794
795    .. group-tab:: Python
796    
797       .. autoclass:: simgrid.Engine
798
799 Engin initialization
800 --------------------
801
802 .. tabs::
803
804    .. group-tab:: C++
805
806       .. doxygenfunction:: simgrid::s4u::Engine::Engine(int *argc, char **argv)
807       .. doxygenfunction:: simgrid::s4u::Engine::is_initialized()
808       .. doxygenfunction:: simgrid::s4u::Engine::shutdown()
809       .. doxygenfunction:: simgrid::s4u::Engine::get_instance()
810
811    .. group-tab:: Python
812
813        .. automethod:: simgrid.Engine.__init__
814        .. autoattribute:: simgrid.Engine.instance
815
816    .. group-tab:: C
817
818       .. doxygenfunction:: simgrid_init
819
820 Simulation setup
821 ----------------
822
823 .. tabs::
824
825    .. group-tab:: C++
826
827       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &str)
828       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, bool value)
829       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, double value)
830       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, int value)
831       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, const std::string &value)
832
833       .. doxygenfunction:: simgrid::s4u::Engine::load_deployment
834       .. doxygenfunction:: simgrid::s4u::Engine::load_platform
835       .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name)
836       .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name, F code)
837       .. doxygenfunction:: simgrid::s4u::Engine::register_default(const std::function< void(int, char **)> &code)
838       .. doxygenfunction:: simgrid::s4u::Engine::register_default(const kernel::actor::ActorCodeFactory &factory)
839
840       .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(int, char **)> &code)
841       .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(std::vector< std::string >)> &code)
842       .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const kernel::actor::ActorCodeFactory &factory)
843
844    .. group-tab:: Python
845
846        .. automethod:: simgrid.Engine.load_deployment
847        .. automethod:: simgrid.Engine.load_platform
848        .. automethod:: simgrid.Engine.register_actor
849
850    .. group-tab:: C
851
852       .. doxygenfunction:: simgrid_load_deployment
853       .. doxygenfunction:: simgrid_load_platform
854       .. doxygenfunction:: simgrid_register_default
855       .. doxygenfunction:: simgrid_register_function
856
857
858 Run the simulation
859 ------------------
860
861 .. tabs::
862
863    .. group-tab:: C++
864
865       .. doxygenfunction:: simgrid::s4u::Engine::get_clock()
866       .. doxygenfunction:: simgrid::s4u::Engine::run
867       .. doxygenfunction:: simgrid::s4u::Engine::run_until
868
869    .. group-tab:: Python
870
871       .. autoattribute:: simgrid.Engine.clock
872       .. automethod:: simgrid.Engine.run
873       .. automethod:: simgrid.Engine.run_until
874
875    .. group-tab:: C
876
877       .. doxygenfunction:: simgrid_get_clock
878       .. doxygenfunction:: simgrid_run
879       .. doxygenfunction:: simgrid_run_until
880
881 Retrieving actors
882 -----------------
883
884 .. tabs::
885
886    .. group-tab:: C++
887
888       .. doxygenfunction:: simgrid::s4u::Engine::get_actor_count
889       .. doxygenfunction:: simgrid::s4u::Engine::get_all_actors
890       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_actors
891
892    .. group-tab:: C
893
894       .. doxygenfunction:: sg_actor_count()
895
896 Retrieving hosts
897 ----------------
898
899 .. tabs::
900
901    .. group-tab:: C++
902
903       .. doxygenfunction:: simgrid::s4u::Engine::get_all_hosts
904       .. doxygenfunction:: simgrid::s4u::Engine::get_host_count
905       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_hosts
906       .. doxygenfunction:: simgrid::s4u::Engine::host_by_name
907       .. doxygenfunction:: simgrid::s4u::Engine::host_by_name_or_null
908
909    .. group-tab:: Python
910
911       .. autoattribute:: simgrid.Engine.all_hosts
912       .. automethod:: simgrid.Engine.host_by_name
913
914    .. group-tab:: C
915
916       See also :cpp:func:`sg_host_list` and :cpp:func:`sg_host_count`.
917
918 Retrieving links
919 ----------------
920
921 .. tabs::
922
923    .. group-tab:: C++
924
925       .. doxygenfunction:: simgrid::s4u::Engine::get_all_links
926       .. doxygenfunction:: simgrid::s4u::Engine::get_link_count
927       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_links
928       .. doxygenfunction:: simgrid::s4u::Engine::link_by_name
929       .. doxygenfunction:: simgrid::s4u::Engine::link_by_name_or_null
930
931    .. group-tab:: Python
932
933       .. autoattribute:: simgrid.Engine.all_links
934
935 Interacting with the routing
936 ----------------------------
937
938 .. tabs::
939
940    .. group-tab:: C++
941
942       .. doxygenfunction:: simgrid::s4u::Engine::get_all_netpoints
943       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_netzones
944       .. doxygenfunction:: simgrid::s4u::Engine::get_netzone_root
945       .. doxygenfunction:: simgrid::s4u::Engine::netpoint_by_name_or_null
946       .. doxygenfunction:: simgrid::s4u::Engine::netzone_by_name_or_null
947
948    .. group-tab:: Python
949
950       .. autoattribute:: simgrid.Engine.all_netpoints
951       .. autoattribute:: simgrid.Engine.netzone_root
952       .. automethod:: simgrid.Engine.netpoint_by_name
953       .. automethod:: simgrid.Engine.netzone_by_name
954
955 Signals
956 -------
957
958 .. tabs::
959
960    .. group-tab:: C++
961
962       .. doxygenfunction:: simgrid::s4u::Engine::on_deadlock_cb
963       .. doxygenfunction:: simgrid::s4u::Engine::on_platform_created_cb
964       .. doxygenfunction:: simgrid::s4u::Engine::on_platform_creation_cb
965       .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_start_cb
966       .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_end_cb
967       .. doxygenfunction:: simgrid::s4u::Engine::on_time_advance_cb
968
969 .. _API_s4u_Mailbox:
970
971 ================
972 ⁣  class Mailbox
973 ================
974
975 .. tabs::
976
977    .. group-tab:: C++
978
979       .. doxygenclass:: simgrid::s4u::Mailbox
980
981    .. group-tab:: Python
982    
983       .. autoclass:: simgrid.Mailbox
984
985 Please also refer to the :ref:`full doc on s4u::Mailbox <s4u_mailbox>`.
986
987 Basic management
988 ----------------
989
990 .. tabs::
991
992    .. group-tab:: C++
993
994       .. code-block:: C++
995
996          #include <simgrid/s4u/Mailbox.hpp>
997
998       Note that there is no MailboxPtr type and that you cannot use the RAII
999       idiom on mailboxes because they are internal objects to the simulation
1000       engine. Once created, there is no way to destroy a mailbox before the end
1001       of the simulation.
1002
1003       .. doxygenfunction:: simgrid::s4u::Mailbox::by_name(const std::string &name)
1004
1005    .. group-tab:: Python
1006
1007       .. code-block:: C++
1008
1009          #include <simgrid/mailbox.h>
1010
1011       .. automethod:: simgrid.Mailbox.by_name
1012
1013    .. group-tab:: C
1014
1015       .. code-block:: C
1016
1017          #include <simgrid/s4u/mailbox.h>
1018
1019       .. doxygentypedef:: sg_mailbox_t
1020       .. doxygentypedef:: const_sg_mailbox_t
1021
1022       .. doxygenfunction:: sg_mailbox_by_name(const char *alias)
1023
1024 Querying info
1025 -------------
1026
1027 .. tabs::
1028
1029    .. group-tab:: C++
1030
1031       .. doxygenfunction:: simgrid::s4u::Mailbox::get_cname
1032       .. doxygenfunction:: simgrid::s4u::Mailbox::get_name
1033
1034    .. group-tab:: Python
1035
1036       .. autoattribute:: simgrid.Mailbox.name
1037
1038 Sending data
1039 ------------
1040
1041 .. tabs::
1042
1043    .. group-tab:: C++
1044
1045       .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes)
1046       .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes, double timeout)
1047       .. doxygenfunction:: simgrid::s4u::Mailbox::put_async(void *data, uint64_t simulated_size_in_bytes)
1048       .. doxygenfunction:: simgrid::s4u::Mailbox::put_init()
1049       .. doxygenfunction:: simgrid::s4u::Mailbox::put_init(void *data, uint64_t simulated_size_in_bytes)
1050
1051    .. group-tab:: Python
1052
1053       .. automethod:: simgrid.Mailbox.put
1054       .. automethod:: simgrid.Mailbox.put_async
1055       .. automethod:: simgrid.Mailbox.put_init
1056
1057    .. group-tab:: C
1058
1059       .. doxygenfunction:: sg_mailbox_put(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1060       .. doxygenfunction:: sg_mailbox_put_init(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1061       .. doxygenfunction:: sg_mailbox_put_async(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1062
1063
1064 Receiving data
1065 --------------
1066
1067 .. tabs::
1068
1069    .. group-tab:: C++
1070
1071       .. doxygenfunction:: simgrid::s4u::Mailbox::empty
1072       .. doxygenfunction:: simgrid::s4u::Mailbox::front
1073       .. doxygenfunction:: simgrid::s4u::Mailbox::get()
1074       .. doxygenfunction:: simgrid::s4u::Mailbox::get(double timeout)
1075       .. doxygenfunction:: simgrid::s4u::Mailbox::get_async(T **data)
1076       .. doxygenfunction:: simgrid::s4u::Mailbox::get_init()
1077       .. doxygenfunction:: simgrid::s4u::Mailbox::iprobe(int type, const std::function<bool(void *, void *, kernel::activity::CommImpl *)>& match_fun, void *data)
1078       .. doxygenfunction:: simgrid::s4u::Mailbox::listen
1079       .. doxygenfunction:: simgrid::s4u::Mailbox::ready
1080
1081    .. group-tab:: Python
1082
1083        .. automethod:: simgrid.Mailbox.get
1084        .. automethod:: simgrid.Mailbox.get_async
1085        .. autoattribute:: simgrid.Mailbox.ready
1086
1087    .. group-tab:: C
1088
1089       .. doxygenfunction:: sg_mailbox_get(sg_mailbox_t mailbox)
1090       .. doxygenfunction:: sg_mailbox_get_async(sg_mailbox_t mailbox, void **data)
1091       .. doxygenfunction:: sg_mailbox_get_name(const_sg_mailbox_t mailbox)
1092       .. doxygenfunction:: sg_mailbox_listen(const char *alias)
1093
1094 Receiving actor
1095 ---------------
1096
1097 See :ref:`s4u_receiving_actor`.
1098
1099 .. tabs::
1100
1101    .. group-tab:: C++
1102
1103       .. doxygenfunction:: simgrid::s4u::Mailbox::get_receiver
1104       .. doxygenfunction:: simgrid::s4u::Mailbox::set_receiver(ActorPtr actor)
1105
1106    .. group-tab:: C
1107
1108       .. doxygenfunction:: sg_mailbox_set_receiver(const char *alias)
1109
1110 .. _API_s4u_Resource:
1111
1112 =========
1113 Resources
1114 =========
1115
1116 .. _API_s4u_Disk:
1117
1118 =============
1119 ⁣  class Disk
1120 =============
1121
1122 .. tabs::
1123
1124    .. group-tab:: C++
1125
1126       .. doxygenclass:: simgrid::s4u::Disk
1127
1128    .. group-tab:: Python
1129    
1130       .. autoclass:: simgrid.Disk
1131
1132    .. group-tab:: C
1133
1134       .. doxygentypedef:: sg_disk_t
1135       .. doxygentypedef:: const_sg_disk_t
1136
1137 Basic management
1138 ----------------
1139
1140 .. tabs::
1141
1142    .. group-tab:: C++
1143
1144       .. code-block:: C++
1145
1146          #include <simgrid/s4u/Disk.hpp>
1147
1148       Note that there is no DiskPtr type and that you cannot use the RAII
1149       idiom on disks because SimGrid does not allow (yet) to create nor
1150       destroy resources once the simulation is started.
1151
1152       .. doxygenfunction:: simgrid::s4u::Disk::seal()
1153
1154    .. group-tab:: Python
1155
1156       .. code:: Python
1157
1158          from simgrid import Disk
1159
1160       .. automethod:: simgrid.Disk.seal
1161
1162
1163 Querying info
1164 -------------
1165
1166 .. tabs::
1167
1168    .. group-tab:: C++
1169
1170       .. doxygenfunction:: simgrid::s4u::Disk::get_cname() const
1171       .. doxygenfunction:: simgrid::s4u::Disk::get_host() const
1172       .. doxygenfunction:: simgrid::s4u::Disk::get_name() const
1173       .. doxygenfunction:: simgrid::s4u::Disk::get_properties() const
1174       .. doxygenfunction:: simgrid::s4u::Disk::get_property(const std::string &key) const
1175       .. doxygenfunction:: simgrid::s4u::Disk::get_read_bandwidth() const
1176       .. doxygenfunction:: simgrid::s4u::Disk::get_write_bandwidth() const
1177       .. doxygenfunction:: simgrid::s4u::Disk::set_property(const std::string &, const std::string &value)
1178       .. doxygenfunction:: simgrid::s4u::Disk::set_sharing_policy
1179
1180    .. group-tab:: Python
1181
1182       .. autoattribute:: simgrid.Disk.name
1183       .. automethod:: simgrid.Disk.set_sharing_policy
1184
1185 I/O operations
1186 --------------
1187
1188 .. tabs::
1189
1190    .. group-tab:: C++
1191
1192       .. doxygenfunction:: simgrid::s4u::Disk::io_init(sg_size_t size, s4u::Io::OpType type) const
1193       .. doxygenfunction:: simgrid::s4u::Disk::read(sg_size_t size) const
1194       .. doxygenfunction:: simgrid::s4u::Disk::read_async(sg_size_t size) const
1195       .. doxygenfunction:: simgrid::s4u::Disk::write(sg_size_t size) const
1196       .. doxygenfunction:: simgrid::s4u::Disk::write_async(sg_size_t size) const
1197
1198    .. group-tab:: Python
1199
1200       .. automethod:: simgrid.Disk.read
1201       .. automethod:: simgrid.Disk.read_async
1202       .. automethod:: simgrid.Disk.write
1203       .. automethod:: simgrid.Disk.write_async
1204
1205 Signals
1206 -------
1207
1208 .. tabs::
1209
1210    .. group-tab:: C++
1211
1212       .. doxygenfunction:: simgrid::s4u::Disk::on_creation_cb
1213       .. doxygenfunction:: simgrid::s4u::Disk::on_destruction_cb
1214       .. doxygenfunction:: simgrid::s4u::Disk::on_state_change_cb
1215
1216
1217 .. _API_s4u_Host:
1218
1219 =============
1220 ⁣  class Host
1221 =============
1222
1223 .. tabs::
1224
1225    .. group-tab:: C++
1226
1227       .. doxygenclass:: simgrid::s4u::Host
1228
1229    .. group-tab:: Python
1230    
1231       .. autoclass:: simgrid.Host
1232
1233 Basic management
1234 ----------------
1235
1236 .. tabs::
1237
1238    .. group-tab:: C++
1239
1240       .. code-block:: C++
1241
1242          #include <simgrid/s4u/Host.hpp>
1243
1244       Note that there is no HostPtr type, and that you cannot use the RAII
1245       idiom on hosts because SimGrid does not allow (yet) to create nor
1246       destroy resources once the simulation is started.
1247
1248       .. doxygenfunction:: simgrid::s4u::Host::destroy()
1249       .. doxygenfunction:: simgrid::s4u::Host::seal()
1250
1251    .. group-tab:: Python
1252
1253       .. code:: Python
1254
1255          from simgrid import Host
1256
1257       .. automethod:: simgrid.Host.seal
1258
1259    .. group-tab:: C
1260
1261       .. code:: C
1262
1263          #include <simgrid/host.h>
1264
1265       .. doxygentypedef:: sg_host_t
1266       .. cpp:type:: const s4u_Host* const_sg_host_t
1267
1268          Pointer to a constant host object.
1269
1270 Retrieving hosts
1271 ----------------
1272
1273 .. tabs::
1274
1275    .. group-tab:: C++
1276
1277       See also :cpp:func:`simgrid::s4u::Engine::get_all_hosts`.
1278
1279       .. doxygenfunction:: simgrid::s4u::Host::by_name(const std::string &name)
1280       .. doxygenfunction:: simgrid::s4u::Host::by_name_or_null(const std::string &name)
1281       .. doxygenfunction:: simgrid::s4u::Host::current()
1282
1283    .. group-tab:: Python
1284
1285       See also :py:attr:`simgrid.Engine.all_hosts`.
1286
1287       .. automethod:: simgrid.Host.by_name
1288       .. automethod:: simgrid.Host.current
1289
1290    .. group-tab:: C
1291
1292       .. doxygenfunction:: sg_host_by_name(const char *name)
1293       .. doxygenfunction:: sg_host_count()
1294       .. doxygenfunction:: sg_host_list()
1295
1296 Modifying characteristics
1297 -------------------------
1298
1299 .. tabs::
1300
1301    .. group-tab:: C++
1302
1303       .. doxygenfunction:: simgrid::s4u::Host::set_core_count(int core_count)
1304       .. doxygenfunction:: simgrid::s4u::Host::set_coordinates(const std::string& coords)
1305       .. doxygenfunction:: simgrid::s4u::Host::set_sharing_policy
1306
1307    .. group-tab:: Python
1308
1309       .. autoattribute:: simgrid.Host.core_count
1310          :noindex:
1311       .. automethod:: simgrid.Host.set_coordinates
1312       .. automethod:: simgrid.Host.set_sharing_policy
1313
1314 Querying info
1315 -------------
1316
1317 .. tabs::
1318
1319    .. group-tab:: C++
1320
1321       .. doxygenfunction:: simgrid::s4u::Host::get_cname() const
1322       .. doxygenfunction:: simgrid::s4u::Host::get_core_count() const
1323       .. doxygenfunction:: simgrid::s4u::Host::get_name() const
1324       .. doxygenfunction:: simgrid::s4u::Host::get_available_speed() const
1325       .. doxygenfunction:: simgrid::s4u::Host::get_load() const
1326       .. doxygenfunction:: simgrid::s4u::Host::get_speed() const
1327
1328    .. group-tab:: Python
1329
1330       .. autoattribute:: simgrid.Host.name
1331       .. autoattribute:: simgrid.Host.core_count
1332       .. autoattribute:: simgrid.Host.load
1333       .. autoattribute:: simgrid.Host.speed
1334       .. autoattribute:: simgrid.Host.available_speed
1335
1336    .. group-tab:: C
1337
1338       .. doxygenfunction:: sg_host_core_count(const_sg_host_t host)
1339       .. doxygenfunction:: sg_host_get_name(const_sg_host_t host)
1340       .. doxygenfunction:: sg_host_get_load(const_sg_host_t host)
1341       .. doxygenfunction:: sg_host_get_speed(const_sg_host_t host)
1342
1343 User data and properties
1344 ------------------------
1345
1346 .. tabs::
1347
1348    .. group-tab:: C++
1349
1350       .. doxygenfunction:: simgrid::s4u::Host::get_properties() const
1351       .. doxygenfunction:: simgrid::s4u::Host::get_property(const std::string &key) const
1352       .. doxygenfunction:: simgrid::s4u::Host::set_properties(const std::unordered_map< std::string, std::string > &properties)
1353       .. doxygenfunction:: simgrid::s4u::Host::set_property(const std::string &key, const std::string &value)
1354
1355    .. group-tab:: C
1356
1357       .. doxygenfunction:: sg_host_set_property_value(sg_host_t host, const char *name, const char *value)
1358       .. doxygenfunction:: sg_host_get_properties(const_sg_host_t host)
1359       .. doxygenfunction:: sg_host_get_property_value(const_sg_host_t host, const char *name)
1360       .. doxygenfunction:: sg_host_extension_create(void(*deleter)(void *))
1361       .. doxygenfunction:: sg_host_extension_get(const_sg_host_t host, size_t rank)
1362
1363 Retrieving components
1364 ---------------------
1365
1366 .. tabs::
1367
1368    .. group-tab:: C++
1369
1370       .. doxygenfunction:: simgrid::s4u::Host::add_disk(const Disk *disk)
1371       .. doxygenfunction:: simgrid::s4u::Host::get_actor_count() const
1372       .. doxygenfunction:: simgrid::s4u::Host::get_all_actors() const
1373       .. doxygenfunction:: simgrid::s4u::Host::get_disks() const
1374       .. doxygenfunction:: simgrid::s4u::Host::remove_disk(const std::string &disk_name)
1375
1376    .. group-tab:: Python
1377
1378       .. automethod:: simgrid.Host.get_disks
1379
1380    .. group-tab:: C
1381
1382       .. doxygenfunction:: sg_host_get_actor_list(const_sg_host_t host, xbt_dynar_t whereto)
1383
1384 On/Off
1385 ------
1386
1387 .. tabs::
1388
1389    .. group-tab:: C++
1390
1391       .. doxygenfunction:: simgrid::s4u::Host::is_on() const
1392       .. doxygenfunction:: simgrid::s4u::Host::turn_off()
1393       .. doxygenfunction:: simgrid::s4u::Host::turn_on()
1394
1395    .. group-tab:: C
1396
1397       .. doxygenfunction:: sg_host_is_on(const_sg_host_t host)
1398       .. doxygenfunction:: sg_host_turn_off(sg_host_t host)
1399       .. doxygenfunction:: sg_host_turn_on(sg_host_t host)
1400
1401 DVFS
1402 ----
1403
1404 .. tabs::
1405
1406    .. group-tab:: C++
1407
1408       .. doxygenfunction:: simgrid::s4u::Host::get_pstate() const
1409       .. doxygenfunction:: simgrid::s4u::Host::get_pstate_count() const
1410       .. doxygenfunction:: simgrid::s4u::Host::get_pstate_speed(unsigned long pstate_index) const
1411       .. doxygenfunction:: simgrid::s4u::Host::set_pstate(unsigned long pstate_index)
1412
1413    .. group-tab:: Python
1414
1415       .. autoattribute:: simgrid.Host.pstate
1416       .. autoattribute:: simgrid.Host.pstate_count
1417       .. automethod:: simgrid.Host.pstate_speed
1418
1419    .. group-tab:: C
1420
1421       .. doxygenfunction:: sg_host_get_available_speed(const_sg_host_t host)
1422       .. doxygenfunction:: sg_host_get_nb_pstates(const_sg_host_t host)
1423       .. doxygenfunction:: sg_host_get_pstate(const_sg_host_t host)
1424       .. doxygenfunction:: sg_host_get_pstate_speed(const_sg_host_t host, unsigned long pstate_index)
1425       .. doxygenfunction:: sg_host_set_pstate(sg_host_t host, unsigned long pstate)
1426
1427 Dynamic profiles
1428 ----------------
1429
1430 .. tabs::
1431
1432    .. group-tab:: C++
1433
1434       .. doxygenfunction:: simgrid::s4u::Host::set_speed_profile(kernel::profile::Profile *p)
1435       .. doxygenfunction:: simgrid::s4u::Host::set_state_profile(kernel::profile::Profile *p)
1436
1437    .. group-tab:: Python
1438
1439       .. automethod:: simgrid.Host.set_speed_profile
1440       .. automethod:: simgrid.Host.set_state_profile
1441
1442 Execution
1443 ---------
1444
1445 .. tabs::
1446
1447    .. group-tab:: C++
1448
1449       .. doxygenfunction:: simgrid::s4u::Host::exec_async
1450       .. doxygenfunction:: simgrid::s4u::Host::execute(double flops) const
1451       .. doxygenfunction:: simgrid::s4u::Host::execute(double flops, double priority) const
1452
1453 Platform and routing
1454 --------------------
1455
1456 You can also start direct communications between two arbitrary hosts
1457 using :cpp:func:`Comm::sendto() <simgrid::s4u::Comm::sendto()>`.
1458
1459 .. tabs::
1460
1461    .. group-tab:: C++
1462
1463       .. doxygenfunction:: simgrid::s4u::Host::get_englobing_zone() const
1464       .. doxygenfunction:: simgrid::s4u::Host::get_netpoint() const
1465       .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< Link * > &links, double *latency) const
1466       .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< kernel::resource::StandardLinkImpl * > &links, double *latency) const
1467       .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, double read_bandwidth, double write_bandwidth)
1468       .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, const std::string& read_bandwidth, const std::string& write_bandwidth)
1469
1470    .. group-tab:: Python
1471
1472       .. autoattribute:: simgrid.Host.netpoint
1473       .. automethod:: simgrid.Host.create_disk
1474          
1475       .. automethod:: simgrid.Host.route_to
1476
1477    .. group-tab:: C
1478
1479       .. doxygenfunction:: sg_host_get_route(const_sg_host_t from, const_sg_host_t to, xbt_dynar_t links)
1480       .. doxygenfunction:: sg_host_get_route_bandwidth(const_sg_host_t from, const_sg_host_t to)
1481       .. doxygenfunction:: sg_host_get_route_latency(const_sg_host_t from, const_sg_host_t to)
1482       .. doxygenfunction:: sg_host_sendto(sg_host_t from, sg_host_t to, double byte_amount)
1483
1484 Signals
1485 -------
1486
1487 .. tabs::
1488
1489    .. group-tab:: C++
1490
1491       .. doxygenfunction:: simgrid::s4u::Host::on_creation_cb
1492       .. doxygenfunction:: simgrid::s4u::Host::on_destruction_cb
1493       .. doxygenfunction:: simgrid::s4u::Host::on_speed_change_cb
1494       .. doxygenfunction:: simgrid::s4u::Host::on_state_change_cb
1495
1496 .. _API_s4u_Link:
1497
1498 =============
1499 ⁣  class Link
1500 =============
1501
1502 .. tabs::
1503
1504    .. group-tab:: C++
1505
1506       .. doxygenclass:: simgrid::s4u::Link
1507       .. doxygenclass:: simgrid::s4u::SplitDuplexLink
1508       .. doxygenclass:: simgrid::s4u::LinkInRoute
1509
1510
1511    .. group-tab:: Python
1512    
1513       .. autoclass:: simgrid.Link
1514
1515 Basic management
1516 ----------------
1517
1518 .. tabs::
1519
1520    .. group-tab:: C++
1521
1522       .. code-block:: C++
1523
1524          #include <simgrid/s4u/Link.hpp>
1525
1526       Note that there is no LinkPtr type and that you cannot use the RAII
1527       idiom on hosts because SimGrid does not allow (yet) to create nor
1528       destroy resources once the simulation is started.
1529
1530       .. doxygenfunction:: simgrid::s4u::Link::seal()
1531
1532    .. group-tab:: Python
1533
1534       .. code:: Python
1535
1536          from simgrid import Link
1537
1538       .. automethod:: simgrid.Link.seal
1539
1540    .. group-tab:: C
1541
1542       .. code:: C
1543
1544          #include <simgrid/link.h>
1545
1546       .. doxygentypedef:: sg_link_t
1547       .. cpp:type:: const s4u_Link* const_sg_link_t
1548
1549          Pointer to a constant link object.
1550
1551 Retrieving links
1552 ----------------
1553
1554 .. tabs::
1555
1556    .. group-tab:: C++
1557
1558       See also :cpp:func:`simgrid::s4u::Engine::get_all_links`.
1559
1560       .. doxygenfunction:: simgrid::s4u::Link::by_name(const std::string &name)
1561       .. doxygenfunction:: simgrid::s4u::Link::by_name_or_null(const std::string &name)
1562
1563    .. group-tab:: Python
1564
1565       See also :py:attr:`simgrid.Engine.all_links`.
1566
1567       .. automethod:: simgrid.Link.by_name
1568       .. autoattribute:: simgrid.Link.name
1569
1570    .. group-tab:: C
1571
1572       .. doxygenfunction:: sg_link_by_name(const char *name)
1573       .. doxygenfunction:: sg_link_count()
1574       .. doxygenfunction:: sg_link_list()
1575
1576 Querying info
1577 --------------
1578
1579 .. tabs::
1580
1581    .. group-tab:: C++
1582
1583       .. doxygenfunction:: simgrid::s4u::Link::get_bandwidth() const
1584       .. doxygenfunction:: simgrid::s4u::Link::get_cname() const
1585       .. doxygenfunction:: simgrid::s4u::Link::get_latency() const
1586       .. doxygenfunction:: simgrid::s4u::Link::get_name() const
1587       .. doxygenfunction:: simgrid::s4u::Link::get_sharing_policy() const
1588       .. doxygenfunction:: simgrid::s4u::Link::get_usage() const
1589       .. doxygenfunction:: simgrid::s4u::Link::is_used() const
1590
1591    .. group-tab:: Python
1592
1593       .. autoattribute:: simgrid.Link.bandwidth
1594       .. autoattribute:: simgrid.Link.latency
1595
1596    .. group-tab:: C
1597
1598       .. doxygenfunction:: sg_link_get_bandwidth(const_sg_link_t link)
1599       .. doxygenfunction:: sg_link_get_latency(const_sg_link_t link)
1600       .. doxygenfunction:: sg_link_get_name(const_sg_link_t link)
1601       .. doxygenfunction:: sg_link_is_shared(const_sg_link_t link)
1602
1603 Modifying characteristics
1604 -------------------------
1605
1606 .. tabs::
1607
1608    .. group-tab:: C++
1609
1610       .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth(double value)
1611       .. doxygenfunction:: simgrid::s4u::Link::set_latency(double value)
1612       .. doxygenfunction:: simgrid::s4u::Link::set_latency(const std::string& value)
1613       .. doxygenfunction:: simgrid::s4u::Link::set_concurrency_limit(int limit)
1614       .. doxygenfunction:: simgrid::s4u::Link::set_sharing_policy
1615
1616    .. group-tab:: Python
1617
1618       .. automethod:: simgrid.Link.set_bandwidth
1619       .. automethod:: simgrid.Link.set_latency
1620       .. automethod:: simgrid.Link.set_concurrency_limit
1621       .. automethod:: simgrid.Link.set_sharing_policy
1622
1623    .. group-tab:: C
1624
1625       .. doxygenfunction:: sg_link_set_bandwidth(sg_link_t link, double value)
1626       .. doxygenfunction:: sg_link_set_latency(sg_link_t link, double value)
1627
1628 User data and properties
1629 ------------------------
1630
1631 .. tabs::
1632
1633    .. group-tab:: C++
1634
1635       .. doxygenfunction:: simgrid::s4u::Link::get_property(const std::string &key) const
1636       .. doxygenfunction:: simgrid::s4u::Link::set_property(const std::string &key, const std::string &value)
1637
1638    .. group-tab:: C
1639
1640       .. doxygenfunction:: sg_link_get_data(const_sg_link_t link)
1641       .. doxygenfunction:: sg_link_set_data(sg_link_t link, void *data)
1642
1643 On/Off
1644 ------
1645
1646 .. tabs::
1647
1648    .. group-tab:: C++
1649
1650       See also :cpp:func:`simgrid::s4u::Link::set_state_profile`.
1651
1652       .. doxygenfunction:: simgrid::s4u::Link::is_on() const
1653       .. doxygenfunction:: simgrid::s4u::Link::turn_off()
1654       .. doxygenfunction:: simgrid::s4u::Link::turn_on()
1655
1656    .. group-tab:: Python
1657
1658       See also :py:func:`simgrid.Link.set_state_profile`.
1659
1660       .. automethod:: simgrid.Link.is_on
1661       .. automethod:: simgrid.Link.turn_off
1662       .. automethod:: simgrid.Link.turn_on
1663
1664 Dynamic profiles
1665 ----------------
1666
1667 See :ref:`howto_churn` for more details.
1668
1669 .. tabs::
1670
1671    .. group-tab:: C++
1672
1673       .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth_profile(kernel::profile::Profile *profile)
1674       .. doxygenfunction:: simgrid::s4u::Link::set_latency_profile(kernel::profile::Profile *profile)
1675       .. doxygenfunction:: simgrid::s4u::Link::set_state_profile(kernel::profile::Profile *profile)
1676
1677    .. group-tab:: Python
1678
1679       .. automethod:: simgrid.Link.set_bandwidth_profile
1680       .. automethod:: simgrid.Link.set_latency_profile
1681       .. automethod:: simgrid.Link.set_state_profile
1682
1683 WIFI links
1684 ----------
1685
1686 .. tabs::
1687
1688    .. group-tab:: C++
1689
1690       .. doxygenfunction:: simgrid::s4u::Link::set_host_wifi_rate
1691
1692    .. group-tab:: Python
1693
1694       .. automethod:: simgrid.Link.set_host_wifi_rate
1695
1696 Signals
1697 -------
1698
1699 .. tabs::
1700
1701    .. group-tab:: C++
1702
1703       .. doxygenfunction:: simgrid::s4u::Link::on_bandwidth_change_cb
1704       .. doxygenfunction:: simgrid::s4u::Link::on_communication_state_change_cb
1705       .. doxygenfunction:: simgrid::s4u::Link::on_creation_cb
1706       .. doxygenfunction:: simgrid::s4u::Link::on_destruction_cb
1707       .. doxygenfunction:: simgrid::s4u::Link::on_state_change_cb
1708
1709 .. _API_s4u_NetZone:
1710
1711 ================
1712 ⁣  class NetZone
1713 ================
1714
1715 .. tabs::
1716
1717    .. group-tab:: C++
1718
1719       .. doxygenclass:: simgrid::s4u::NetZone
1720
1721    .. group-tab:: Python
1722    
1723       .. autoclass:: simgrid.NetZone
1724
1725 Basic management
1726 ----------------
1727
1728 .. tabs::
1729
1730    .. group-tab:: C++
1731
1732       .. code-block:: C++
1733
1734          #include <simgrid/s4u/NetZone.hpp>
1735
1736       Note that there is no NetZonePtr type and that you cannot use the RAII
1737       idiom on network zones because SimGrid does not allow (yet) to create nor
1738       destroy resources once the simulation is started.
1739
1740       .. doxygenfunction:: simgrid::s4u::NetZone::seal
1741
1742    .. group-tab:: Python
1743
1744       .. code:: Python
1745
1746          from simgrid import NetZone
1747
1748       .. automethod:: simgrid.NetZone.seal
1749
1750    .. group-tab:: C
1751
1752       .. code:: C
1753
1754          #include <simgrid/zone.h>
1755
1756       .. doxygentypedef:: sg_netzone_t
1757       .. cpp:type:: const s4u_NetZone* const_sg_netzone_t
1758
1759          Pointer to a constant network zone object.
1760
1761 Retrieving zones
1762 ----------------
1763
1764 .. tabs::
1765
1766    .. group-tab:: C++
1767
1768       See :cpp:func:`simgrid::s4u::Engine::get_netzone_root`,
1769       :cpp:func:`simgrid::s4u::Engine::netzone_by_name_or_null` and
1770       :cpp:func:`simgrid::s4u::Engine::get_filtered_netzones`.
1771
1772    .. group-tab:: C
1773
1774       .. doxygenfunction:: sg_zone_get_by_name(const char *name)
1775       .. doxygenfunction:: sg_zone_get_root()
1776
1777 Querying info
1778 --------------
1779
1780 .. tabs::
1781
1782    .. group-tab:: C++
1783
1784       .. doxygenfunction:: simgrid::s4u::NetZone::get_cname() const
1785       .. doxygenfunction:: simgrid::s4u::NetZone::get_name() const
1786       .. doxygenfunction:: simgrid::s4u::NetZone::get_netpoint()
1787
1788    .. group-tab:: Python
1789
1790       .. autoattribute:: simgrid.NetZone.name
1791       .. autoattribute:: simgrid.NetZone.netpoint
1792
1793    .. group-tab:: C
1794
1795       .. doxygenfunction:: sg_zone_get_name(const_sg_netzone_t zone)
1796
1797 User data and properties
1798 ------------------------
1799
1800 .. tabs::
1801
1802    .. group-tab:: C++
1803
1804       .. doxygenfunction:: simgrid::s4u::NetZone::get_properties() const
1805       .. doxygenfunction:: simgrid::s4u::NetZone::get_property(const std::string &key) const
1806       .. doxygenfunction:: simgrid::s4u::NetZone::set_property(const std::string &key, const std::string &value)
1807
1808    .. group-tab:: Python
1809
1810       .. automethod:: simgrid.NetZone.set_property
1811
1812    .. group-tab:: C
1813
1814       .. doxygenfunction:: sg_zone_get_property_value(const_sg_netzone_t as, const char *name)
1815       .. doxygenfunction:: sg_zone_set_property_value(sg_netzone_t netzone, const char *name, const char *value)
1816
1817 Retrieving components
1818 ---------------------
1819
1820 .. tabs::
1821
1822    .. group-tab:: C++
1823
1824       .. doxygenfunction:: simgrid::s4u::NetZone::get_all_hosts() const
1825       .. doxygenfunction:: simgrid::s4u::NetZone::get_host_count() const
1826
1827    .. group-tab:: C
1828
1829       .. doxygenfunction:: sg_zone_get_hosts(const_sg_netzone_t zone, xbt_dynar_t whereto)
1830
1831 Routing data
1832 ------------
1833
1834 .. tabs::
1835
1836    .. group-tab:: C++
1837
1838       .. doxygenfunction:: simgrid::s4u::NetZone::add_component(kernel::routing::NetPoint *elm)
1839       .. doxygenfunction:: simgrid::s4u::NetZone::add_route
1840       .. doxygenfunction:: simgrid::s4u::NetZone::add_bypass_route
1841       .. doxygenfunction:: simgrid::s4u::NetZone::get_children() const
1842       .. doxygenfunction:: simgrid::s4u::NetZone::get_parent() const
1843       .. doxygenfunction:: simgrid::s4u::NetZone::set_parent(const NetZone* parent)
1844
1845    .. group-tab:: Python
1846
1847       .. automethod:: simgrid.NetZone.add_route
1848       .. automethod:: simgrid.NetZone.set_parent
1849
1850    .. group-tab:: C
1851
1852       .. doxygenfunction:: sg_zone_get_sons(const_sg_netzone_t zone, xbt_dict_t whereto)
1853
1854 Signals
1855 -------
1856
1857 .. tabs::
1858
1859   .. group-tab:: C++
1860
1861      .. doxygenfunction:: simgrid::s4u::NetZone::on_creation_cb
1862      .. doxygenfunction:: simgrid::s4u::NetZone::on_seal_cb
1863
1864 Creating resources
1865 ------------------
1866
1867 Zones
1868 ^^^^^
1869 .. tabs::
1870
1871   .. group-tab:: C++
1872
1873      .. doxygenfunction:: simgrid::s4u::create_full_zone
1874      .. doxygenfunction:: simgrid::s4u::create_empty_zone
1875      .. doxygenfunction:: simgrid::s4u::create_star_zone
1876      .. doxygenfunction:: simgrid::s4u::create_dijkstra_zone
1877      .. doxygenfunction:: simgrid::s4u::create_floyd_zone
1878      .. doxygenfunction:: simgrid::s4u::create_vivaldi_zone
1879      .. doxygenfunction:: simgrid::s4u::create_wifi_zone
1880      .. doxygenfunction:: simgrid::s4u::create_torus_zone
1881      .. doxygenfunction:: simgrid::s4u::create_fatTree_zone
1882      .. doxygenfunction:: simgrid::s4u::create_dragonfly_zone
1883
1884   .. group-tab:: Python
1885
1886      .. automethod:: simgrid.NetZone.create_full_zone
1887      .. automethod:: simgrid.NetZone.create_empty_zone
1888      .. automethod:: simgrid.NetZone.create_star_zone
1889      .. automethod:: simgrid.NetZone.create_dijkstra_zone
1890      .. automethod:: simgrid.NetZone.create_floyd_zone
1891      .. automethod:: simgrid.NetZone.create_vivaldi_zone
1892      .. automethod:: simgrid.NetZone.create_wifi_zone
1893      .. automethod:: simgrid.NetZone.create_torus_zone
1894      .. automethod:: simgrid.NetZone.create_fatTree_zone
1895      .. automethod:: simgrid.NetZone.create_dragonfly_zone
1896
1897 Hosts
1898 ^^^^^
1899
1900 .. tabs::
1901
1902   .. group-tab:: C++
1903
1904      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<double>& speed_per_pstate)
1905      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, double speed)
1906      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<std::string>& speed_per_pstate)
1907      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::string& speed)
1908
1909   .. group-tab:: Python
1910
1911      .. automethod:: simgrid.NetZone.create_host
1912
1913 Links
1914 ^^^^^
1915
1916 .. tabs::
1917
1918   .. group-tab:: C++
1919
1920      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<double>& bandwidths)
1921      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, double bandwidth)
1922      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<std::string>& bandwidthds)
1923      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::string& bandwidth)
1924      .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, const std::string& bandwidth)
1925      .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, double bandwidth)
1926
1927   .. group-tab:: Python
1928
1929      .. automethod:: simgrid.NetZone.create_link
1930      .. automethod:: simgrid.NetZone.create_split_duplex_link
1931
1932 Router
1933 ^^^^^^
1934
1935 .. tabs::
1936
1937   .. group-tab:: C++
1938
1939      .. doxygenfunction:: simgrid::s4u::NetZone::create_router(const std::string& name)
1940
1941   .. group-tab:: Python
1942
1943      .. automethod:: simgrid.NetZone.create_router
1944
1945 .. _API_s4u_VirtualMachine:
1946
1947 =======================
1948 ⁣  class VirtualMachine
1949 =======================
1950
1951
1952 .. doxygenclass:: simgrid::s4u::VirtualMachine
1953
1954 Basic management
1955 ----------------
1956 .. tabs::
1957
1958    .. group-tab:: C++
1959
1960       .. code-block:: C++
1961
1962          #include <simgrid/s4u/VirtualMachine.hpp>
1963
1964       Note that there is no VirtualMachinePtr type, and that you cannot use the RAII
1965       idiom on virtual machines. There is no good reason for that and should change in the future.
1966
1967    .. group-tab:: C
1968
1969       .. code:: C
1970
1971          #include <simgrid/vm.h>
1972
1973       .. doxygentypedef:: sg_vm_t
1974       .. cpp:type:: const s4u_VirtualMachine* const_sg_vm_t
1975
1976          Pointer to a constant virtual machine object.
1977
1978 Creating VMs
1979 ------------
1980
1981 .. tabs::
1982
1983    .. group-tab:: C++
1984
1985       .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount)
1986       .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount, size_t ramsize)
1987       .. doxygenfunction:: simgrid::s4u::VirtualMachine::destroy
1988
1989    .. group-tab:: C
1990
1991       .. doxygenfunction:: sg_vm_create_core
1992       .. doxygenfunction:: sg_vm_create_multicore
1993       .. doxygenfunction:: sg_vm_destroy
1994
1995 Querying info
1996 --------------
1997
1998 .. tabs::
1999
2000    .. group-tab:: C++
2001
2002       .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_pm() const
2003       .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_ramsize() const
2004       .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_state() const
2005
2006       .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_bound(double bound)
2007       .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_pm(Host *pm)
2008       .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_ramsize(size_t ramsize)
2009
2010    .. group-tab:: C
2011
2012       .. doxygenfunction:: sg_vm_get_ramsize(const_sg_vm_t vm)
2013       .. doxygenfunction:: sg_vm_set_bound(sg_vm_t vm, double bound)
2014       .. doxygenfunction:: sg_vm_set_ramsize(sg_vm_t vm, size_t size)
2015
2016       .. doxygenfunction:: sg_vm_get_name
2017       .. doxygenfunction:: sg_vm_get_pm
2018       .. doxygenfunction:: sg_vm_is_created
2019       .. doxygenfunction:: sg_vm_is_running
2020       .. doxygenfunction:: sg_vm_is_suspended
2021
2022 Life cycle
2023 ----------
2024
2025 .. tabs::
2026
2027    .. group-tab:: C++
2028
2029       .. doxygenfunction:: simgrid::s4u::VirtualMachine::resume()
2030       .. doxygenfunction:: simgrid::s4u::VirtualMachine::shutdown()
2031       .. doxygenfunction:: simgrid::s4u::VirtualMachine::start()
2032       .. doxygenfunction:: simgrid::s4u::VirtualMachine::suspend()
2033
2034    .. group-tab:: C
2035
2036       .. doxygenfunction:: sg_vm_start
2037       .. doxygenfunction:: sg_vm_suspend
2038       .. doxygenfunction:: sg_vm_resume
2039       .. doxygenfunction:: sg_vm_shutdown
2040
2041 Signals
2042 -------
2043
2044 .. tabs::
2045
2046    .. group-tab:: C++
2047
2048       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_creation_cb
2049       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_destruction_cb
2050       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_end_cb
2051       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_start_cb
2052       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_resume_cb
2053       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_shutdown_cb
2054       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_start_cb
2055       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_started_cb
2056       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_suspend_cb
2057
2058 .. _API_s4u_Activity:
2059
2060 ==========
2061 Activities
2062 ==========
2063
2064 ==============
2065 class Activity
2066 ==============
2067
2068 .. doxygenclass:: simgrid::s4u::Activity
2069
2070 **Known subclasses:**
2071 :ref:`Communications <API_s4u_Comm>` (started on Mailboxes and consuming links),
2072 :ref:`Executions <API_s4u_Exec>` (started on Host and consuming CPU resources)
2073 :ref:`I/O <API_s4u_Io>` (started on and consuming disks).
2074 See also the :ref:`section on activities <s4u_Activities>` above.
2075
2076 Basic management
2077 ----------------
2078
2079 .. tabs::
2080
2081    .. group-tab:: C++
2082
2083       .. code-block:: C++
2084
2085          #include <simgrid/s4u/Activity.hpp>
2086
2087       .. doxygentypedef:: ActivityPtr
2088
2089 Querying info
2090 -------------
2091
2092 .. tabs::
2093
2094    .. group-tab:: C++
2095
2096       .. doxygenfunction:: simgrid::s4u::Activity::get_cname
2097       .. doxygenfunction:: simgrid::s4u::Activity::get_name
2098       .. doxygenfunction:: simgrid::s4u::Activity::get_remaining() const
2099       .. doxygenfunction:: simgrid::s4u::Activity::get_state() const
2100       .. doxygenfunction:: simgrid::s4u::Activity::set_remaining(double remains)
2101       .. doxygenfunction:: simgrid::s4u::Activity::set_state(Activity::State state)
2102
2103
2104 Activities life cycle
2105 ---------------------
2106
2107 .. tabs::
2108
2109    .. group-tab:: C++
2110
2111       .. doxygenfunction:: simgrid::s4u::Activity::start
2112       .. doxygenfunction:: simgrid::s4u::Activity::cancel
2113       .. doxygenfunction:: simgrid::s4u::Activity::test
2114       .. doxygenfunction:: simgrid::s4u::Activity::wait
2115       .. doxygenfunction:: simgrid::s4u::Activity::wait_for
2116       .. doxygenfunction:: simgrid::s4u::Activity::wait_until(double time_limit)
2117       .. doxygenfunction:: simgrid::s4u::Activity::vetoable_start()
2118
2119 Suspending and resuming an activity
2120 -----------------------------------
2121
2122 .. tabs::
2123
2124    .. group-tab:: C++
2125
2126       .. doxygenfunction:: simgrid::s4u::Activity::suspend
2127       .. doxygenfunction:: simgrid::s4u::Activity::resume
2128       .. doxygenfunction:: simgrid::s4u::Activity::is_suspended
2129
2130 Signals
2131 -------
2132
2133 .. tabs::
2134
2135    .. group-tab:: C++
2136
2137       .. doxygenfunction:: simgrid::s4u::Activity::on_completion_cb
2138       .. doxygenfunction:: simgrid::s4u::Activity::on_suspended_cb
2139       .. doxygenfunction:: simgrid::s4u::Activity::on_resumed_cb
2140
2141 .. _API_s4u_Comm:
2142
2143 =============
2144 ⁣  class Comm
2145 =============
2146
2147 .. tabs::
2148
2149    .. group-tab:: C++
2150
2151       .. doxygenclass:: simgrid::s4u::Comm
2152
2153    .. group-tab:: Python
2154    
2155       .. autoclass:: simgrid.Comm
2156
2157 Basic management
2158 ----------------
2159
2160 .. tabs::
2161
2162    .. group-tab:: C++
2163
2164       .. code-block:: C++
2165
2166          #include <simgrid/s4u/Comm.hpp>
2167
2168       .. doxygentypedef:: CommPtr
2169
2170    .. group-tab:: Python
2171
2172       .. code:: Python
2173
2174          from simgrid import Comm
2175
2176    .. group-tab:: c
2177
2178       .. code:: c
2179
2180          #include <simgrid/comm.h>
2181
2182       .. doxygentypedef:: sg_comm_t
2183
2184 Querying info
2185 -------------
2186
2187 .. tabs::
2188
2189    .. group-tab:: C++
2190
2191       .. doxygenfunction:: simgrid::s4u::Comm::get_dst_data_size() const
2192       .. doxygenfunction:: simgrid::s4u::Comm::get_mailbox() const
2193       .. doxygenfunction:: simgrid::s4u::Comm::get_sender() const
2194       .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff)
2195       .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff, size_t size)
2196       .. doxygenfunction:: simgrid::s4u::Comm::detach()
2197       .. doxygenfunction:: simgrid::s4u::Comm::detach(const std::function<void(void*)>& clean_function)
2198       .. doxygenfunction:: simgrid::s4u::Comm::set_payload_size(uint64_t bytes)
2199       .. doxygenfunction:: simgrid::s4u::Comm::set_rate(double rate)
2200       .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff)
2201       .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff, size_t size)
2202       .. doxygenfunction:: simgrid::s4u::Comm::set_src_data_size(size_t size)
2203
2204    .. group-tab:: Python
2205
2206       .. autoattribute:: simgrid.Comm.dst_data_size
2207       .. autoattribute:: simgrid.Comm.mailbox
2208       .. autoattribute:: simgrid.Comm.sender
2209       .. autoattribute:: simgrid.Comm.state_str
2210       .. automethod:: simgrid.Comm.detach
2211       .. automethod:: simgrid.Comm.set_payload_size
2212       .. automethod:: simgrid.Comm.set_rate
2213
2214 Life cycle
2215 ----------
2216
2217 Most communications are created using :ref:`s4u_mailbox`, but you can
2218 also start direct communications as shown below.
2219
2220 .. tabs::
2221
2222    .. group-tab:: C++
2223
2224       .. doxygenfunction:: simgrid::s4u::Comm::sendto
2225       .. doxygenfunction:: simgrid::s4u::Comm::sendto_init()
2226       .. doxygenfunction:: simgrid::s4u::Comm::sendto_init(Host *from, Host *to)
2227       .. doxygenfunction:: simgrid::s4u::Comm::sendto_async
2228
2229       .. doxygenfunction:: simgrid::s4u::Comm::cancel
2230       .. doxygenfunction:: simgrid::s4u::Comm::start
2231       .. doxygenfunction:: simgrid::s4u::Comm::test
2232       .. doxygenfunction:: simgrid::s4u::Comm::test_any(const std::vector< CommPtr >& comms)
2233       .. doxygenfunction:: simgrid::s4u::Comm::wait
2234       .. doxygenfunction:: simgrid::s4u::Comm::wait_all(const std::vector< CommPtr >& comms)
2235       .. doxygenfunction:: simgrid::s4u::Comm::wait_all_for(const std::vector< CommPtr >& comms, double timeout)
2236       .. doxygenfunction:: simgrid::s4u::Comm::wait_any(const std::vector< CommPtr >& comms)
2237       .. doxygenfunction:: simgrid::s4u::Comm::wait_any_for(const std::vector< CommPtr >& comms, double timeout)
2238       .. doxygenfunction:: simgrid::s4u::Comm::wait_for
2239       .. doxygenfunction:: simgrid::s4u::Comm::wait_until
2240
2241    .. group-tab:: Python
2242
2243       .. automethod:: simgrid.Comm.sendto
2244       .. automethod:: simgrid.Comm.sendto_init
2245       .. automethod:: simgrid.Comm.sendto_async
2246
2247       .. automethod:: simgrid.Comm.cancel
2248       .. automethod:: simgrid.Comm.start
2249       .. automethod:: simgrid.Comm.test
2250       .. automethod:: simgrid.Comm.test_any
2251       .. automethod:: simgrid.Comm.wait
2252       .. automethod:: simgrid.Comm.wait_for
2253       .. automethod:: simgrid.Comm.wait_all
2254       .. automethod:: simgrid.Comm.wait_all_for
2255       .. automethod:: simgrid.Comm.wait_any
2256       .. automethod:: simgrid.Comm.wait_any_for
2257       .. automethod:: simgrid.Comm.wait_until
2258
2259    .. group-tab:: C
2260
2261       .. doxygenfunction:: sg_comm_test
2262       .. doxygenfunction:: sg_comm_wait
2263       .. doxygenfunction:: sg_comm_wait_all
2264       .. doxygenfunction:: sg_comm_wait_any
2265
2266 Signals
2267 -------
2268
2269 .. tabs::
2270
2271    .. group-tab:: C++
2272
2273       .. doxygenfunction:: simgrid::s4u::Comm::on_start_cb
2274       .. doxygenfunction:: simgrid::s4u::Comm::on_completion_cb
2275       .. doxygenfunction:: simgrid::s4u::Comm::on_recv_cb
2276       .. doxygenfunction:: simgrid::s4u::Comm::on_send_cb
2277
2278 .. _API_s4u_Exec:
2279
2280 =============
2281 ⁣  class Exec
2282 =============
2283
2284 .. tabs::
2285
2286    .. group-tab:: C++
2287
2288       .. doxygenclass:: simgrid::s4u::Exec
2289
2290    .. group-tab:: Python
2291    
2292       .. autoclass:: simgrid.Exec
2293
2294 Basic management
2295 ----------------
2296
2297 .. tabs::
2298
2299    .. group-tab:: C++
2300
2301       .. code-block:: C++
2302
2303          #include <simgrid/s4u/Exec.hpp>
2304
2305       .. doxygentypedef:: ExecPtr
2306
2307    .. group-tab:: Python
2308
2309       .. code:: Python
2310
2311          from simgrid import Exec
2312
2313    .. group-tab:: C
2314
2315       .. code-block:: C
2316
2317          #include <simgrid/exec.h>
2318
2319       .. doxygentypedef:: sg_exec_t
2320       .. doxygentypedef:: const_sg_exec_t
2321
2322 Querying info
2323 -------------
2324
2325 .. tabs::
2326
2327    .. group-tab:: C++
2328
2329       .. doxygenfunction:: simgrid::s4u::Exec::get_cost() const
2330       .. doxygenfunction:: simgrid::s4u::Exec::get_finish_time() const
2331       .. doxygenfunction:: simgrid::s4u::Exec::get_host() const
2332       .. doxygenfunction:: simgrid::s4u::Exec::get_host_number() const
2333       .. doxygenfunction:: simgrid::s4u::Exec::get_remaining
2334       .. doxygenfunction:: simgrid::s4u::Exec::get_remaining_ratio
2335       .. doxygenfunction:: simgrid::s4u::Exec::get_start_time() const
2336       .. doxygenfunction:: simgrid::s4u::Exec::set_bound(double bound)
2337       .. doxygenfunction:: simgrid::s4u::Exec::set_host
2338       .. doxygenfunction:: simgrid::s4u::Exec::set_priority(double priority)
2339
2340    .. group-tab:: Python
2341
2342       .. autoattribute:: simgrid.Exec.host
2343       .. autoattribute:: simgrid.Exec.remaining
2344       .. autoattribute:: simgrid.Exec.remaining_ratio
2345
2346    .. group-tab:: C
2347
2348       .. doxygenfunction:: sg_exec_set_bound(sg_exec_t exec, double bound)
2349       .. doxygenfunction:: sg_exec_get_name(const_sg_exec_t exec)
2350       .. doxygenfunction:: sg_exec_set_name(sg_exec_t exec, const char* name)
2351       .. doxygenfunction:: sg_exec_set_host(sg_exec_t exec, sg_host_t new_host)
2352       .. doxygenfunction:: sg_exec_get_remaining(const_sg_exec_t exec)
2353       .. doxygenfunction:: sg_exec_get_remaining_ratio(const_sg_exec_t exec)
2354
2355 Life cycle
2356 ----------
2357
2358 .. tabs::
2359
2360    .. group-tab:: C++
2361
2362       .. doxygenfunction:: simgrid::s4u::Exec::cancel
2363       .. doxygenfunction:: simgrid::s4u::Exec::start
2364       .. doxygenfunction:: simgrid::s4u::Exec::test
2365       .. doxygenfunction:: simgrid::s4u::Exec::wait
2366       .. doxygenfunction:: simgrid::s4u::Exec::wait_any(const std::vector< ExecPtr >& execs)
2367       .. doxygenfunction:: simgrid::s4u::Exec::wait_any_for(const std::vector< ExecPtr >& execs, double timeout)
2368       .. doxygenfunction:: simgrid::s4u::Exec::wait_for
2369
2370    .. group-tab:: Python
2371
2372        .. automethod:: simgrid.Exec.cancel
2373        .. automethod:: simgrid.Exec.start
2374        .. automethod:: simgrid.Exec.test
2375        .. automethod:: simgrid.Exec.wait
2376
2377    .. group-tab:: C
2378
2379        .. doxygenfunction:: sg_exec_start(sg_exec_t exec)
2380        .. doxygenfunction:: sg_exec_cancel(sg_exec_t exec);
2381        .. doxygenfunction:: sg_exec_test(sg_exec_t exec);
2382        .. doxygenfunction:: sg_exec_wait(sg_exec_t exec);
2383        .. doxygenfunction:: sg_exec_wait_for(sg_exec_t exec, double timeout);
2384        .. doxygenfunction:: sg_exec_wait_any_for(sg_exec_t* execs, size_t count, double timeout);
2385        .. doxygenfunction:: sg_exec_wait_any(sg_exec_t* execs, size_t count);
2386
2387 Signals
2388 -------
2389
2390 .. tabs::
2391
2392    .. group-tab:: C++
2393
2394       .. doxygenfunction:: simgrid::s4u::Exec::on_start_cb
2395       .. doxygenfunction:: simgrid::s4u::Exec::on_completion_cb
2396
2397 .. _API_s4u_Io:
2398
2399 ===========
2400 ⁣  class Io
2401 ===========
2402
2403 .. tabs::
2404
2405    .. group-tab:: C++
2406
2407       .. doxygenclass:: simgrid::s4u::Io
2408
2409    .. group-tab:: Python
2410    
2411       .. autoclass:: simgrid.Io
2412
2413 Basic management
2414 ----------------
2415
2416 .. tabs::
2417
2418    .. group-tab:: C++
2419
2420       .. code-block:: C++
2421
2422          #include <simgrid/s4u/Io.hpp>
2423
2424       .. doxygentypedef:: IoPtr
2425
2426 Querying info
2427 -------------
2428
2429 .. tabs::
2430
2431    .. group-tab:: C++
2432
2433       .. doxygenfunction:: simgrid::s4u::Io::get_performed_ioops() const
2434       .. doxygenfunction:: simgrid::s4u::Io::get_remaining
2435
2436 Life cycle
2437 ----------
2438
2439 .. tabs::
2440
2441    .. group-tab:: C++
2442
2443       .. doxygenfunction:: simgrid::s4u::Io::cancel
2444       .. doxygenfunction:: simgrid::s4u::Io::start
2445       .. doxygenfunction:: simgrid::s4u::Io::test
2446       .. doxygenfunction:: simgrid::s4u::Io::wait
2447       .. doxygenfunction:: simgrid::s4u::Io::wait_for
2448       .. doxygenfunction:: simgrid::s4u::Io::wait_any(const std::vector<IoPtr> &ios)
2449       .. doxygenfunction:: simgrid::s4u::Io::wait_any_for(const std::vector<IoPtr> &ios, double timeout)
2450
2451    .. group-tab:: Python
2452
2453       .. automethod:: simgrid.Io.test
2454       .. automethod:: simgrid.Io.wait
2455       .. automethod:: simgrid.Io.wait_any_for
2456       .. automethod:: simgrid.Io.wait_any
2457
2458 Signals
2459 -------
2460
2461 .. tabs::
2462
2463    .. group-tab:: C++
2464
2465       .. doxygenfunction:: simgrid::s4u::Io::on_start_cb
2466       .. doxygenfunction:: simgrid::s4u::Io::on_completion_cb
2467
2468 .. _API_s4u_Synchronizations:
2469
2470 =======================
2471 Synchronization Objects
2472 =======================
2473
2474 .. _API_s4u_Mutex:
2475
2476 ==============
2477 ⁣  Mutex
2478 ==============
2479
2480 .. tabs::
2481
2482    .. group-tab:: C++
2483
2484       .. doxygenclass:: simgrid::s4u::Mutex
2485
2486    .. group-tab:: Python
2487
2488       .. autoclass:: simgrid.Mutex
2489
2490 Basic management
2491 ----------------
2492
2493    .. tabs::
2494
2495       .. group-tab:: C++
2496
2497          .. code-block:: C++
2498
2499             #include <simgrid/s4u/Mutex.hpp>
2500
2501          .. doxygentypedef:: MutexPtr
2502
2503          .. doxygenfunction:: simgrid::s4u::Mutex::create()
2504
2505       .. group-tab:: Python
2506
2507          .. code-block:: Python
2508
2509             from simgrid import Mutex
2510             mutex = Mutex()
2511
2512             # Use a context manager to acquire and automatically release the mutex
2513             # when leaving the scope.
2514             with mutex:
2515                 # Access shared resource ...
2516                 pass
2517
2518          .. automethod:: simgrid.Mutex.__init__
2519
2520       .. group-tab:: C
2521
2522          .. code-block:: C
2523
2524             #include <simgrid/mutex.h>
2525
2526          .. doxygentypedef:: sg_mutex_t
2527          .. cpp:type:: const s4u_Mutex* const_sg_mutex_t
2528
2529             Pointer to a constant mutex object.
2530
2531          .. doxygenfunction:: sg_mutex_init()
2532          .. doxygenfunction:: sg_mutex_destroy(const_sg_mutex_t mutex)
2533
2534 Locking
2535 -------
2536
2537    .. tabs::
2538
2539       .. group-tab:: C++
2540
2541          .. doxygenfunction:: simgrid::s4u::Mutex::lock()
2542          .. doxygenfunction:: simgrid::s4u::Mutex::try_lock()
2543          .. doxygenfunction:: simgrid::s4u::Mutex::unlock()
2544
2545       .. group-tab:: Python
2546
2547          .. automethod:: simgrid.Mutex.lock
2548          .. automethod:: simgrid.Mutex.try_lock
2549          .. automethod:: simgrid.Mutex.unlock
2550
2551       .. group-tab:: C
2552
2553          .. doxygenfunction:: sg_mutex_lock(sg_mutex_t mutex)
2554          .. doxygenfunction:: sg_mutex_try_lock(sg_mutex_t mutex)
2555          .. doxygenfunction:: sg_mutex_unlock(sg_mutex_t mutex)
2556
2557 .. _API_s4u_Barrier:
2558
2559 ================
2560 ⁣  Barrier
2561 ================
2562
2563 .. tabs::
2564
2565    .. group-tab:: C++
2566
2567       .. doxygenclass:: simgrid::s4u::Barrier
2568
2569    .. group-tab:: Python
2570
2571       .. autoclass:: simgrid.Barrier
2572
2573 .. tabs::
2574
2575    .. group-tab:: C++
2576
2577       .. code-block:: C++
2578
2579          #include <simgrid/s4u/Barrier.hpp>
2580
2581       .. doxygentypedef:: BarrierPtr
2582
2583       .. doxygenfunction:: simgrid::s4u::Barrier::create(unsigned int expected_actors)
2584       .. doxygenfunction:: simgrid::s4u::Barrier::wait()
2585
2586    .. group-tab:: Python
2587
2588       .. code-block:: Python
2589
2590          from simgrid import Barrier
2591          barrier = Barrier(2)
2592
2593       .. automethod:: simgrid.Barrier.__init__
2594       .. automethod:: simgrid.Barrier.wait
2595
2596    .. group-tab:: C
2597
2598       .. code-block:: C
2599
2600          #include <simgrid/barrier.hpp>
2601
2602       .. doxygentypedef:: sg_bar_t
2603
2604       .. doxygenfunction:: sg_barrier_init(unsigned int count)
2605       .. doxygenfunction:: sg_barrier_destroy(sg_bar_t bar)
2606       .. doxygenfunction:: sg_barrier_wait(sg_bar_t bar)
2607
2608
2609 .. _API_s4u_ConditionVariable:
2610
2611 ==========================
2612 ⁣  Condition variable
2613 ==========================
2614
2615 .. doxygenclass:: simgrid::s4u::ConditionVariable
2616
2617 Basic management
2618 ----------------
2619
2620    .. tabs::
2621
2622       .. group-tab:: C++
2623
2624          .. code-block:: C++
2625
2626             #include <simgrid/s4u/ConditionVariable.hpp>
2627
2628          .. doxygentypedef:: ConditionVariablePtr
2629
2630          .. doxygenfunction:: simgrid::s4u::ConditionVariable::create()
2631
2632       .. group-tab:: C
2633
2634          .. code-block:: C
2635
2636             #include <simgrid/cond.h>
2637
2638          .. doxygentypedef:: sg_cond_t
2639          .. doxygentypedef:: const_sg_cond_t
2640          .. doxygenfunction:: sg_cond_init
2641          .. doxygenfunction:: sg_cond_destroy
2642
2643 Waiting and notifying
2644 ---------------------
2645
2646    .. tabs::
2647
2648       .. group-tab:: C++
2649
2650          .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_all()
2651          .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_one()
2652          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(s4u::MutexPtr lock)
2653          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< s4u::Mutex > &lock)
2654          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< Mutex > &lock, P pred)
2655          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration)
2656          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration, P pred)
2657          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration)
2658          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration, P pred)
2659          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time)
2660          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time, P pred)
2661          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time)
2662          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time, P pred)
2663
2664       .. group-tab:: C
2665
2666          .. doxygenfunction:: sg_cond_notify_all
2667          .. doxygenfunction:: sg_cond_notify_one
2668          .. doxygenfunction:: sg_cond_wait
2669          .. doxygenfunction:: sg_cond_wait_for
2670
2671 .. _API_s4u_Semaphore:
2672
2673 ==================
2674 ⁣  Semaphore
2675 ==================
2676
2677 .. tabs::
2678
2679    .. group-tab:: C++
2680
2681       .. doxygenclass:: simgrid::s4u::Semaphore
2682
2683    .. group-tab:: Python
2684
2685       .. autoclass:: simgrid.Semaphore
2686
2687 Basic management
2688 ----------------
2689
2690    .. tabs::
2691
2692       .. group-tab:: C++
2693
2694          .. code-block:: C++
2695
2696             #include <simgrid/s4u/Semaphore.hpp>
2697
2698          .. doxygentypedef:: SemaphorePtr
2699          .. doxygenfunction:: simgrid::s4u::Semaphore::create(unsigned int initial_capacity)
2700
2701       .. group-tab:: Python
2702
2703          .. code-block:: Python
2704
2705             from simgrid import Semaphore
2706             semaphore = Semaphore(1)
2707             # Automatically acquire the semaphore, and release it after leaving the scope.
2708             with semaphore:
2709                 # Do something with the shared resource
2710                 pass
2711
2712          .. automethod:: simgrid.Semaphore.__init__
2713
2714       .. group-tab:: C
2715
2716          .. code-block:: C
2717
2718             #include <simgrid/semaphore.h>
2719
2720          .. doxygentypedef:: sg_sem_t
2721          .. cpp:type:: const s4u_Semaphore* const_sg_sem_t
2722
2723             Pointer to a constant semaphore object.
2724
2725          .. doxygenfunction:: sg_sem_init(int initial_value)
2726          .. doxygenfunction:: sg_sem_destroy(const_sg_sem_t sem)
2727
2728 Locking
2729 -------
2730
2731    .. tabs::
2732
2733       .. group-tab:: C++
2734
2735          .. doxygenfunction:: simgrid::s4u::Semaphore::acquire()
2736          .. doxygenfunction:: simgrid::s4u::Semaphore::acquire_timeout(double timeout)
2737          .. doxygenfunction:: simgrid::s4u::Semaphore::get_capacity() const
2738          .. doxygenfunction:: simgrid::s4u::Semaphore::release()
2739          .. doxygenfunction:: simgrid::s4u::Semaphore::would_block() const
2740
2741       .. group-tab:: Python
2742
2743          .. automethod:: simgrid.Semaphore.acquire
2744          .. automethod:: simgrid.Semaphore.acquire_timeout
2745          .. autoattribute:: simgrid.Semaphore.capacity
2746          .. automethod:: simgrid.Semaphore.release
2747          .. autoattribute:: simgrid.Semaphore.would_block
2748
2749       .. group-tab:: C
2750
2751          .. doxygenfunction:: sg_sem_acquire(sg_sem_t sem)
2752          .. doxygenfunction:: sg_sem_acquire_timeout(sg_sem_t sem, double timeout)
2753          .. doxygenfunction:: sg_sem_get_capacity(const_sg_sem_t sem)
2754          .. doxygenfunction:: sg_sem_release(sg_sem_t sem)
2755          .. doxygenfunction:: sg_sem_would_block(const_sg_sem_t sem)
2756
2757 .. |hr| raw:: html
2758
2759    <hr />