Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Mark unused type aliases as deprecated.
[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
602    .. group-tab:: Python
603
604       .. automethod:: simgrid.Actor.join
605
606    .. group-tab:: C
607
608       .. doxygenfunction:: sg_actor_on_exit
609       .. doxygenfunction:: sg_actor_join(const_sg_actor_t actor, double timeout)
610       .. doxygenfunction:: sg_actor_set_auto_restart(sg_actor_t actor, int auto_restart)
611
612 Signals
613 -------
614
615 .. tabs::
616
617    .. group-tab:: C++
618
619       .. doxygenfunction:: simgrid::s4u::Actor::on_creation_cb
620       .. doxygenfunction:: simgrid::s4u::Actor::on_suspend_cb
621       .. doxygenfunction:: simgrid::s4u::Actor::on_host_change_cb
622       .. doxygenfunction:: simgrid::s4u::Actor::on_resume_cb
623       .. doxygenfunction:: simgrid::s4u::Actor::on_sleep_cb
624       .. doxygenfunction:: simgrid::s4u::Actor::on_wake_up_cb
625       .. doxygenfunction:: simgrid::s4u::Actor::on_termination_cb
626       .. doxygenfunction:: simgrid::s4u::Actor::on_destruction_cb
627
628 .. _API_s4u_this_actor:
629
630 ====================
631 ⁣  The current actor
632 ====================
633
634 These functions can be used in your user code to interact with the actor
635 currently running (the one retrieved with :cpp:func:`simgrid::s4u::Actor::self`).
636 Using these functions can greatly improve the code readability.
637
638 Querying info
639 -------------
640
641 .. tabs::
642
643    .. group-tab:: C++
644
645       .. doxygenfunction:: simgrid::s4u::this_actor::get_cname()
646       .. doxygenfunction:: simgrid::s4u::this_actor::get_name()
647       .. doxygenfunction:: simgrid::s4u::this_actor::get_pid()
648       .. doxygenfunction:: simgrid::s4u::this_actor::get_ppid()
649       .. doxygenfunction:: simgrid::s4u::this_actor::is_maestro()
650
651       .. doxygenfunction:: simgrid::s4u::this_actor::get_host()
652       .. doxygenfunction:: simgrid::s4u::this_actor::set_host(Host *new_host)
653
654    .. group-tab:: Python
655
656       .. autofunction:: simgrid.this_actor.get_host
657       .. autofunction:: simgrid.this_actor.set_host
658
659       .. autofunction:: simgrid.this_actor.get_pid
660       .. autofunction:: simgrid.this_actor.get_ppid
661
662    .. group-tab:: C
663
664       .. doxygenfunction:: sg_actor_self_get_data()
665       .. doxygenfunction:: sg_actor_self_set_data(void *data)
666       .. doxygenfunction:: sg_actor_self_get_name()
667       .. doxygenfunction:: sg_actor_self_get_pid()
668       .. doxygenfunction:: sg_actor_self_get_ppid()
669       .. doxygenfunction:: sg_host_self()
670       .. doxygenfunction:: sg_host_self_get_name()
671
672 Suspending and resuming
673 -----------------------
674
675 .. tabs::
676
677    .. group-tab:: C++
678
679       .. doxygenfunction:: simgrid::s4u::this_actor::suspend()
680       .. doxygenfunction:: simgrid::s4u::this_actor::yield()
681
682    .. group-tab:: Python
683
684       .. autofunction:: simgrid.this_actor.suspend
685       .. autofunction:: simgrid.this_actor.yield_
686
687    .. group-tab:: C
688
689       .. doxygenfunction:: sg_actor_yield()
690
691 Logging messages
692 ----------------
693
694 .. tabs::
695
696    .. group-tab:: C++
697
698       Please refer to :ref:`the relevant documentation <logging_prog>`.
699
700    .. group-tab:: Python
701
702        .. autofunction:: simgrid.this_actor.debug
703        .. autofunction:: simgrid.this_actor.info
704        .. autofunction:: simgrid.this_actor.error
705
706 Sleeping
707 --------
708
709 .. tabs::
710
711    .. group-tab:: C++
712
713       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(double duration)
714       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(std::chrono::duration< Rep, Period > duration)
715       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(const SimulationTimePoint< Duration > &wakeup_time)
716       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(double wakeup_time)
717
718    .. group-tab:: Python
719
720       .. autofunction:: simgrid.this_actor.sleep_for
721       .. autofunction:: simgrid.this_actor.sleep_until
722
723    .. group-tab:: C
724
725       .. doxygenfunction:: sg_actor_sleep_for(double duration)
726
727 Simulating executions
728 ---------------------
729
730 Simulate the execution of some code on this actor. You can either simulate
731 parallel or sequential code and you can either block upon the termination of
732 the execution, or start an asynchronous activity.
733
734 .. tabs::
735
736    .. group-tab:: C++
737
738       .. doxygenfunction:: simgrid::s4u::this_actor::exec_async
739       .. 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)
740       .. doxygenfunction:: simgrid::s4u::this_actor::exec_init(double flops_amounts)
741       .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop)
742       .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop, double priority)
743       .. 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)
744
745    .. group-tab:: Python
746
747       .. autofunction:: simgrid.this_actor.exec_init
748       .. autofunction:: simgrid.this_actor.execute
749
750    .. group-tab:: C
751
752       .. doxygenfunction:: sg_actor_execute(double flops)
753       .. doxygenfunction:: sg_actor_execute_with_priority(double flops, double priority)
754       .. doxygenfunction:: sg_actor_exec_init(double computation_amount)
755       .. doxygenfunction:: sg_actor_exec_async(double computation_amount)
756       .. doxygenfunction:: sg_actor_parallel_exec_init(int host_nb, const sg_host_t* host_list, double* flops_amount, double* bytes_amount);
757
758 Exiting
759 -------
760
761 .. tabs::
762
763    .. group-tab:: C++
764
765       .. doxygenfunction:: simgrid::s4u::this_actor::exit()
766       .. doxygenfunction:: simgrid::s4u::this_actor::on_exit(const std::function< void(bool)> &fun)
767
768    .. group-tab:: Python
769
770       .. autofunction:: simgrid.this_actor.exit
771       .. autofunction:: simgrid.this_actor.on_exit
772
773    .. group-tab:: c
774
775       See also :cpp:func:`sg_actor_on_exit`.
776
777       .. doxygenfunction:: sg_actor_exit
778
779 .. _API_s4u_Engine:
780
781 ====================
782 ⁣  Simulation Engine
783 ====================
784
785 .. tabs::
786
787    .. group-tab:: C++
788
789       .. doxygenclass:: simgrid::s4u::Engine
790
791    .. group-tab:: Python
792    
793       .. autoclass:: simgrid.Engine
794
795 Engin initialization
796 --------------------
797
798 .. tabs::
799
800    .. group-tab:: C++
801
802       .. doxygenfunction:: simgrid::s4u::Engine::Engine(int *argc, char **argv)
803       .. doxygenfunction:: simgrid::s4u::Engine::is_initialized()
804       .. doxygenfunction:: simgrid::s4u::Engine::shutdown()
805       .. doxygenfunction:: simgrid::s4u::Engine::get_instance()
806
807    .. group-tab:: Python
808
809        .. automethod:: simgrid.Engine.__init__
810        .. autoattribute:: simgrid.Engine.instance
811
812    .. group-tab:: C
813
814       .. doxygenfunction:: simgrid_init
815
816 Simulation setup
817 ----------------
818
819 .. tabs::
820
821    .. group-tab:: C++
822
823       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &str)
824       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, bool value)
825       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, double value)
826       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, int value)
827       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, const std::string &value)
828
829       .. doxygenfunction:: simgrid::s4u::Engine::load_deployment
830       .. doxygenfunction:: simgrid::s4u::Engine::load_platform
831       .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name)
832       .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name, F code)
833       .. doxygenfunction:: simgrid::s4u::Engine::register_default(const std::function< void(int, char **)> &code)
834       .. doxygenfunction:: simgrid::s4u::Engine::register_default(const kernel::actor::ActorCodeFactory &factory)
835
836       .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(int, char **)> &code)
837       .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(std::vector< std::string >)> &code)
838       .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const kernel::actor::ActorCodeFactory &factory)
839
840    .. group-tab:: Python
841
842        .. automethod:: simgrid.Engine.load_deployment
843        .. automethod:: simgrid.Engine.load_platform
844        .. automethod:: simgrid.Engine.register_actor
845
846    .. group-tab:: C
847
848       .. doxygenfunction:: simgrid_load_deployment
849       .. doxygenfunction:: simgrid_load_platform
850       .. doxygenfunction:: simgrid_register_default
851       .. doxygenfunction:: simgrid_register_function
852
853
854 Run the simulation
855 ------------------
856
857 .. tabs::
858
859    .. group-tab:: C++
860
861       .. doxygenfunction:: simgrid::s4u::Engine::get_clock()
862       .. doxygenfunction:: simgrid::s4u::Engine::run
863       .. doxygenfunction:: simgrid::s4u::Engine::run_until
864
865    .. group-tab:: Python
866
867       .. autoattribute:: simgrid.Engine.clock
868       .. automethod:: simgrid.Engine.run
869       .. automethod:: simgrid.Engine.run_until
870
871    .. group-tab:: C
872
873       .. doxygenfunction:: simgrid_get_clock
874       .. doxygenfunction:: simgrid_run
875       .. doxygenfunction:: simgrid_run_until
876
877 Retrieving actors
878 -----------------
879
880 .. tabs::
881
882    .. group-tab:: C++
883
884       .. doxygenfunction:: simgrid::s4u::Engine::get_actor_count
885       .. doxygenfunction:: simgrid::s4u::Engine::get_all_actors
886       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_actors
887
888    .. group-tab:: C
889
890       .. doxygenfunction:: sg_actor_count()
891
892 Retrieving hosts
893 ----------------
894
895 .. tabs::
896
897    .. group-tab:: C++
898
899       .. doxygenfunction:: simgrid::s4u::Engine::get_all_hosts
900       .. doxygenfunction:: simgrid::s4u::Engine::get_host_count
901       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_hosts
902       .. doxygenfunction:: simgrid::s4u::Engine::host_by_name
903       .. doxygenfunction:: simgrid::s4u::Engine::host_by_name_or_null
904
905    .. group-tab:: Python
906
907       .. autoattribute:: simgrid.Engine.all_hosts
908
909    .. group-tab:: C
910
911       See also :cpp:func:`sg_host_list` and :cpp:func:`sg_host_count`.
912
913 Retrieving links
914 ----------------
915
916 .. tabs::
917
918    .. group-tab:: C++
919
920       .. doxygenfunction:: simgrid::s4u::Engine::get_all_links
921       .. doxygenfunction:: simgrid::s4u::Engine::get_link_count
922       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_links
923       .. doxygenfunction:: simgrid::s4u::Engine::link_by_name
924       .. doxygenfunction:: simgrid::s4u::Engine::link_by_name_or_null
925
926    .. group-tab:: Python
927
928       .. autoattribute:: simgrid.Engine.all_links
929
930 Interacting with the routing
931 ----------------------------
932
933 .. tabs::
934
935    .. group-tab:: C++
936
937       .. doxygenfunction:: simgrid::s4u::Engine::get_all_netpoints
938       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_netzones
939       .. doxygenfunction:: simgrid::s4u::Engine::get_netzone_root
940       .. doxygenfunction:: simgrid::s4u::Engine::netpoint_by_name_or_null
941       .. doxygenfunction:: simgrid::s4u::Engine::netzone_by_name_or_null
942
943    .. group-tab:: Python
944
945       .. autoattribute:: simgrid.Engine.all_netpoints
946       .. autoattribute:: simgrid.Engine.netzone_root
947       .. automethod:: simgrid.Engine.netpoint_by_name
948       .. automethod:: simgrid.Engine.netzone_by_name
949
950 Signals
951 -------
952
953 .. tabs::
954
955    .. group-tab:: C++
956
957       .. doxygenfunction:: simgrid::s4u::Engine::on_deadlock_cb
958       .. doxygenfunction:: simgrid::s4u::Engine::on_platform_created_cb
959       .. doxygenfunction:: simgrid::s4u::Engine::on_platform_creation_cb
960       .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_start_cb
961       .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_end_cb
962       .. doxygenfunction:: simgrid::s4u::Engine::on_time_advance_cb
963
964 .. _API_s4u_Mailbox:
965
966 ================
967 ⁣  class Mailbox
968 ================
969
970 .. tabs::
971
972    .. group-tab:: C++
973
974       .. doxygenclass:: simgrid::s4u::Mailbox
975
976    .. group-tab:: Python
977    
978       .. autoclass:: simgrid.Mailbox
979
980 Please also refer to the :ref:`full doc on s4u::Mailbox <s4u_mailbox>`.
981
982 Basic management
983 ----------------
984
985 .. tabs::
986
987    .. group-tab:: C++
988
989       .. code-block:: C++
990
991          #include <simgrid/s4u/Mailbox.hpp>
992
993       Note that there is no MailboxPtr type and that you cannot use the RAII
994       idiom on mailboxes because they are internal objects to the simulation
995       engine. Once created, there is no way to destroy a mailbox before the end
996       of the simulation.
997
998       .. doxygenfunction:: simgrid::s4u::Mailbox::by_name(const std::string &name)
999
1000    .. group-tab:: Python
1001
1002       .. code-block:: C++
1003
1004          #include <simgrid/mailbox.h>
1005
1006       .. automethod:: simgrid.Mailbox.by_name
1007
1008    .. group-tab:: C
1009
1010       .. code-block:: C
1011
1012          #include <simgrid/s4u/mailbox.h>
1013
1014       .. doxygentypedef:: sg_mailbox_t
1015       .. doxygentypedef:: const_sg_mailbox_t
1016
1017       .. doxygenfunction:: sg_mailbox_by_name(const char *alias)
1018
1019 Querying info
1020 -------------
1021
1022 .. tabs::
1023
1024    .. group-tab:: C++
1025
1026       .. doxygenfunction:: simgrid::s4u::Mailbox::get_cname
1027       .. doxygenfunction:: simgrid::s4u::Mailbox::get_name
1028
1029    .. group-tab:: Python
1030
1031       .. autoattribute:: simgrid.Mailbox.name
1032
1033 Sending data
1034 ------------
1035
1036 .. tabs::
1037
1038    .. group-tab:: C++
1039
1040       .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes)
1041       .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes, double timeout)
1042       .. doxygenfunction:: simgrid::s4u::Mailbox::put_async(void *data, uint64_t simulated_size_in_bytes)
1043       .. doxygenfunction:: simgrid::s4u::Mailbox::put_init()
1044       .. doxygenfunction:: simgrid::s4u::Mailbox::put_init(void *data, uint64_t simulated_size_in_bytes)
1045
1046    .. group-tab:: Python
1047
1048       .. automethod:: simgrid.Mailbox.put
1049       .. automethod:: simgrid.Mailbox.put_async
1050
1051    .. group-tab:: C
1052
1053       .. doxygenfunction:: sg_mailbox_put(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1054       .. doxygenfunction:: sg_mailbox_put_init(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1055       .. doxygenfunction:: sg_mailbox_put_async(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1056
1057
1058 Receiving data
1059 --------------
1060
1061 .. tabs::
1062
1063    .. group-tab:: C++
1064
1065       .. doxygenfunction:: simgrid::s4u::Mailbox::empty
1066       .. doxygenfunction:: simgrid::s4u::Mailbox::front
1067       .. doxygenfunction:: simgrid::s4u::Mailbox::get()
1068       .. doxygenfunction:: simgrid::s4u::Mailbox::get(double timeout)
1069       .. doxygenfunction:: simgrid::s4u::Mailbox::get_async(T **data)
1070       .. doxygenfunction:: simgrid::s4u::Mailbox::get_init()
1071       .. doxygenfunction:: simgrid::s4u::Mailbox::iprobe(int type, bool(*match_fun)(void *, void *, kernel::activity::CommImpl *), void *data)
1072       .. doxygenfunction:: simgrid::s4u::Mailbox::listen
1073       .. doxygenfunction:: simgrid::s4u::Mailbox::ready
1074
1075    .. group-tab:: Python
1076
1077        .. automethod:: simgrid.Mailbox.get
1078        .. automethod:: simgrid.Mailbox.get_async
1079
1080    .. group-tab:: C
1081
1082       .. doxygenfunction:: sg_mailbox_get(sg_mailbox_t mailbox)
1083       .. doxygenfunction:: sg_mailbox_get_async(sg_mailbox_t mailbox, void **data)
1084       .. doxygenfunction:: sg_mailbox_get_name(const_sg_mailbox_t mailbox)
1085       .. doxygenfunction:: sg_mailbox_listen(const char *alias)
1086
1087 Receiving actor
1088 ---------------
1089
1090 See :ref:`s4u_receiving_actor`.
1091
1092 .. tabs::
1093
1094    .. group-tab:: C++
1095
1096       .. doxygenfunction:: simgrid::s4u::Mailbox::get_receiver
1097       .. doxygenfunction:: simgrid::s4u::Mailbox::set_receiver(ActorPtr actor)
1098
1099    .. group-tab:: C
1100
1101       .. doxygenfunction:: sg_mailbox_set_receiver(const char *alias)
1102
1103 .. _API_s4u_Resource:
1104
1105 =========
1106 Resources
1107 =========
1108
1109 .. _API_s4u_Disk:
1110
1111 =============
1112 ⁣  class Disk
1113 =============
1114
1115 .. tabs::
1116
1117    .. group-tab:: C++
1118
1119       .. doxygenclass:: simgrid::s4u::Disk
1120
1121    .. group-tab:: Python
1122    
1123       .. autoclass:: simgrid.Disk
1124
1125    .. group-tab:: C
1126
1127       .. doxygentypedef:: sg_disk_t
1128       .. doxygentypedef:: const_sg_disk_t
1129
1130 Basic management
1131 ----------------
1132
1133 .. tabs::
1134
1135    .. group-tab:: C++
1136
1137       .. code-block:: C++
1138
1139          #include <simgrid/s4u/Disk.hpp>
1140
1141       Note that there is no DiskPtr type and that you cannot use the RAII
1142       idiom on disks because SimGrid does not allow (yet) to create nor
1143       destroy resources once the simulation is started.
1144
1145       .. doxygenfunction:: simgrid::s4u::Disk::seal()
1146
1147    .. group-tab:: Python
1148
1149       .. code:: Python
1150
1151          from simgrid import Disk
1152
1153       .. automethod:: simgrid.Disk.seal
1154
1155
1156 Querying info
1157 -------------
1158
1159 .. tabs::
1160
1161    .. group-tab:: C++
1162
1163       .. doxygenfunction:: simgrid::s4u::Disk::get_cname() const
1164       .. doxygenfunction:: simgrid::s4u::Disk::get_host() const
1165       .. doxygenfunction:: simgrid::s4u::Disk::get_name() const
1166       .. doxygenfunction:: simgrid::s4u::Disk::get_properties() const
1167       .. doxygenfunction:: simgrid::s4u::Disk::get_property(const std::string &key) const
1168       .. doxygenfunction:: simgrid::s4u::Disk::get_read_bandwidth() const
1169       .. doxygenfunction:: simgrid::s4u::Disk::get_write_bandwidth() const
1170       .. doxygenfunction:: simgrid::s4u::Disk::set_property(const std::string &, const std::string &value)
1171       .. doxygenfunction:: simgrid::s4u::Disk::set_sharing_policy(Operation op, SharingPolicy policy, const s4u::NonLinearResourceCb& cb = {})
1172
1173    .. group-tab:: Python
1174
1175       .. autoattribute:: simgrid.Disk.name
1176       .. automethod:: simgrid.Disk.set_sharing_policy
1177
1178 I/O operations
1179 --------------
1180
1181 .. tabs::
1182
1183    .. group-tab:: C++
1184
1185       .. doxygenfunction:: simgrid::s4u::Disk::io_init(sg_size_t size, s4u::Io::OpType type) const
1186       .. doxygenfunction:: simgrid::s4u::Disk::read(sg_size_t size) const
1187       .. doxygenfunction:: simgrid::s4u::Disk::read_async(sg_size_t size) const
1188       .. doxygenfunction:: simgrid::s4u::Disk::write(sg_size_t size) const
1189       .. doxygenfunction:: simgrid::s4u::Disk::write_async(sg_size_t size) const
1190
1191    .. group-tab:: Python
1192
1193       .. automethod:: simgrid.Disk.read
1194       .. automethod:: simgrid.Disk.read_async
1195       .. automethod:: simgrid.Disk.write
1196       .. automethod:: simgrid.Disk.write_async
1197
1198 Signals
1199 -------
1200
1201 .. tabs::
1202
1203    .. group-tab:: C++
1204
1205       .. doxygenfunction:: simgrid::s4u::Disk::on_creation_cb
1206       .. doxygenfunction:: simgrid::s4u::Disk::on_destruction_cb
1207       .. doxygenfunction:: simgrid::s4u::Disk::on_state_change_cb
1208
1209
1210 .. _API_s4u_Host:
1211
1212 =============
1213 ⁣  class Host
1214 =============
1215
1216 .. tabs::
1217
1218    .. group-tab:: C++
1219
1220       .. doxygenclass:: simgrid::s4u::Host
1221
1222    .. group-tab:: Python
1223    
1224       .. autoclass:: simgrid.Host
1225
1226 Basic management
1227 ----------------
1228
1229 .. tabs::
1230
1231    .. group-tab:: C++
1232
1233       .. code-block:: C++
1234
1235          #include <simgrid/s4u/Host.hpp>
1236
1237       Note that there is no HostPtr type, and that you cannot use the RAII
1238       idiom on hosts because SimGrid does not allow (yet) to create nor
1239       destroy resources once the simulation is started.
1240
1241       .. doxygenfunction:: simgrid::s4u::Host::destroy()
1242       .. doxygenfunction:: simgrid::s4u::Host::seal()
1243
1244    .. group-tab:: Python
1245
1246       .. code:: Python
1247
1248          from simgrid import Host
1249
1250       .. automethod:: simgrid.Host.seal
1251
1252    .. group-tab:: C
1253
1254       .. code:: C
1255
1256          #include <simgrid/host.h>
1257
1258       .. doxygentypedef:: sg_host_t
1259       .. cpp:type:: const s4u_Host* const_sg_host_t
1260
1261          Pointer to a constant host object.
1262
1263 Retrieving hosts
1264 ----------------
1265
1266 .. tabs::
1267
1268    .. group-tab:: C++
1269
1270       See also :cpp:func:`simgrid::s4u::Engine::get_all_hosts`.
1271
1272       .. doxygenfunction:: simgrid::s4u::Host::by_name(const std::string &name)
1273       .. doxygenfunction:: simgrid::s4u::Host::by_name_or_null(const std::string &name)
1274       .. doxygenfunction:: simgrid::s4u::Host::current()
1275
1276    .. group-tab:: Python
1277
1278       See also :py:attr:`simgrid.Engine.all_hosts`.
1279
1280       .. automethod:: simgrid.Host.by_name
1281       .. automethod:: simgrid.Host.current
1282
1283    .. group-tab:: C
1284
1285       .. doxygenfunction:: sg_host_by_name(const char *name)
1286       .. doxygenfunction:: sg_host_count()
1287       .. doxygenfunction:: sg_host_list()
1288
1289 Modifying characteristics
1290 -------------------------
1291
1292 .. tabs::
1293
1294    .. group-tab:: C++
1295
1296       .. doxygenfunction:: simgrid::s4u::Host::set_core_count(int core_count)
1297       .. doxygenfunction:: simgrid::s4u::Host::set_coordinates(const std::string& coords)
1298       .. doxygenfunction:: simgrid::s4u::Host::set_sharing_policy(SharingPolicy policy, const s4u::NonLinearResourceCb& cb = {})
1299
1300    .. group-tab:: Python
1301
1302       .. autoattribute:: simgrid.Host.core_count
1303       .. automethod:: simgrid.Host.set_coordinates
1304       .. automethod:: simgrid.Host.set_sharing_policy
1305
1306 Querying info
1307 -------------
1308
1309 .. tabs::
1310
1311    .. group-tab:: C++
1312
1313       .. doxygenfunction:: simgrid::s4u::Host::get_cname() const
1314       .. doxygenfunction:: simgrid::s4u::Host::get_core_count() const
1315       .. doxygenfunction:: simgrid::s4u::Host::get_name() const
1316       .. doxygenfunction:: simgrid::s4u::Host::get_available_speed() const
1317       .. doxygenfunction:: simgrid::s4u::Host::get_load() const
1318       .. doxygenfunction:: simgrid::s4u::Host::get_speed() const
1319
1320    .. group-tab:: Python
1321
1322       .. autoattribute:: simgrid.Host.name
1323       .. autoattribute:: simgrid.Host.core_count
1324       .. autoattribute:: simgrid.Host.load
1325       .. autoattribute:: simgrid.Host.pstate
1326       .. autoattribute:: simgrid.Host.speed
1327       .. autoattribute:: simgrid.Host.available_speed
1328
1329    .. group-tab:: C
1330
1331       .. doxygenfunction:: sg_host_core_count(const_sg_host_t host)
1332       .. doxygenfunction:: sg_host_get_name(const_sg_host_t host)
1333       .. doxygenfunction:: sg_host_get_load(const_sg_host_t host)
1334       .. doxygenfunction:: sg_host_get_speed(const_sg_host_t host)
1335
1336 User data and properties
1337 ------------------------
1338
1339 .. tabs::
1340
1341    .. group-tab:: C++
1342
1343       .. doxygenfunction:: simgrid::s4u::Host::get_properties() const
1344       .. doxygenfunction:: simgrid::s4u::Host::get_property(const std::string &key) const
1345       .. doxygenfunction:: simgrid::s4u::Host::set_properties(const std::unordered_map< std::string, std::string > &properties)
1346       .. doxygenfunction:: simgrid::s4u::Host::set_property(const std::string &key, const std::string &value)
1347
1348    .. group-tab:: C
1349
1350       .. doxygenfunction:: sg_host_set_property_value(sg_host_t host, const char *name, const char *value)
1351       .. doxygenfunction:: sg_host_get_properties(const_sg_host_t host)
1352       .. doxygenfunction:: sg_host_get_property_value(const_sg_host_t host, const char *name)
1353       .. doxygenfunction:: sg_host_extension_create(void(*deleter)(void *))
1354       .. doxygenfunction:: sg_host_extension_get(const_sg_host_t host, size_t rank)
1355
1356 Retrieving components
1357 ---------------------
1358
1359 .. tabs::
1360
1361    .. group-tab:: C++
1362
1363       .. doxygenfunction:: simgrid::s4u::Host::add_disk(const Disk *disk)
1364       .. doxygenfunction:: simgrid::s4u::Host::get_actor_count() const
1365       .. doxygenfunction:: simgrid::s4u::Host::get_all_actors() const
1366       .. doxygenfunction:: simgrid::s4u::Host::get_disks() const
1367       .. doxygenfunction:: simgrid::s4u::Host::remove_disk(const std::string &disk_name)
1368
1369    .. group-tab:: Python
1370
1371       .. automethod:: simgrid.Host.get_disks
1372
1373    .. group-tab:: C
1374
1375       .. doxygenfunction:: sg_host_get_actor_list(const_sg_host_t host, xbt_dynar_t whereto)
1376
1377 On/Off
1378 ------
1379
1380 .. tabs::
1381
1382    .. group-tab:: C++
1383
1384       .. doxygenfunction:: simgrid::s4u::Host::is_on() const
1385       .. doxygenfunction:: simgrid::s4u::Host::turn_off()
1386       .. doxygenfunction:: simgrid::s4u::Host::turn_on()
1387
1388    .. group-tab:: C
1389
1390       .. doxygenfunction:: sg_host_is_on(const_sg_host_t host)
1391       .. doxygenfunction:: sg_host_turn_off(sg_host_t host)
1392       .. doxygenfunction:: sg_host_turn_on(sg_host_t host)
1393
1394 DVFS
1395 ----
1396
1397 .. tabs::
1398
1399    .. group-tab:: C++
1400
1401       .. doxygenfunction:: simgrid::s4u::Host::get_pstate() const
1402       .. doxygenfunction:: simgrid::s4u::Host::get_pstate_count() const
1403       .. doxygenfunction:: simgrid::s4u::Host::get_pstate_speed(unsigned long pstate_index) const
1404       .. doxygenfunction:: simgrid::s4u::Host::set_pstate(unsigned long pstate_index)
1405
1406    .. group-tab:: Python
1407
1408       .. autoattribute:: simgrid.Host.pstate_count
1409       .. automethod:: simgrid.Host.pstate_speed
1410
1411    .. group-tab:: C
1412
1413       .. doxygenfunction:: sg_host_get_available_speed(const_sg_host_t host)
1414       .. doxygenfunction:: sg_host_get_nb_pstates(const_sg_host_t host)
1415       .. doxygenfunction:: sg_host_get_pstate(const_sg_host_t host)
1416       .. doxygenfunction:: sg_host_get_pstate_speed(const_sg_host_t host, unsigned long pstate_index)
1417       .. doxygenfunction:: sg_host_set_pstate(sg_host_t host, unsigned long pstate)
1418
1419 Dynamic profiles
1420 ----------------
1421
1422 .. tabs::
1423
1424    .. group-tab:: C++
1425
1426       .. doxygenfunction:: simgrid::s4u::Host::set_speed_profile(kernel::profile::Profile *p)
1427       .. doxygenfunction:: simgrid::s4u::Host::set_state_profile(kernel::profile::Profile *p)
1428
1429    .. group-tab:: Python
1430
1431       .. automethod:: simgrid.Host.set_speed_profile
1432       .. automethod:: simgrid.Host.set_state_profile
1433
1434 Execution
1435 ---------
1436
1437 .. tabs::
1438
1439    .. group-tab:: C++
1440
1441       .. doxygenfunction:: simgrid::s4u::Host::exec_async
1442       .. doxygenfunction:: simgrid::s4u::Host::execute(double flops) const
1443       .. doxygenfunction:: simgrid::s4u::Host::execute(double flops, double priority) const
1444
1445 Platform and routing
1446 --------------------
1447
1448 You can also start direct communications between two arbitrary hosts
1449 using :cpp:func:`Comm::sendto() <simgrid::s4u::Comm::sendto()>`.
1450
1451 .. tabs::
1452
1453    .. group-tab:: C++
1454
1455       .. doxygenfunction:: simgrid::s4u::Host::get_englobing_zone() const
1456       .. doxygenfunction:: simgrid::s4u::Host::get_netpoint() const
1457       .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< Link * > &links, double *latency) const
1458       .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< kernel::resource::StandardLinkImpl * > &links, double *latency) const
1459       .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, double read_bandwidth, double write_bandwidth)
1460       .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, const std::string& read_bandwidth, const std::string& write_bandwidth)
1461
1462    .. group-tab:: Python
1463
1464       .. autoattribute:: simgrid.Host.netpoint
1465       .. automethod:: simgrid.Host.create_disk
1466          
1467       .. automethod:: simgrid.Host.route_to
1468
1469    .. group-tab:: C
1470
1471       .. doxygenfunction:: sg_host_get_route(const_sg_host_t from, const_sg_host_t to, xbt_dynar_t links)
1472       .. doxygenfunction:: sg_host_get_route_bandwidth(const_sg_host_t from, const_sg_host_t to)
1473       .. doxygenfunction:: sg_host_get_route_latency(const_sg_host_t from, const_sg_host_t to)
1474       .. doxygenfunction:: sg_host_sendto(sg_host_t from, sg_host_t to, double byte_amount)
1475
1476 Signals
1477 -------
1478
1479 .. tabs::
1480
1481    .. group-tab:: C++
1482
1483       .. doxygenfunction:: simgrid::s4u::Host::on_creation_cb
1484       .. doxygenfunction:: simgrid::s4u::Host::on_destruction_cb
1485       .. doxygenfunction:: simgrid::s4u::Host::on_speed_change_cb
1486       .. doxygenfunction:: simgrid::s4u::Host::on_state_change_cb
1487
1488 .. _API_s4u_Link:
1489
1490 =============
1491 ⁣  class Link
1492 =============
1493
1494 .. tabs::
1495
1496    .. group-tab:: C++
1497
1498       .. doxygenclass:: simgrid::s4u::Link
1499       .. doxygenclass:: simgrid::s4u::SplitDuplexLink
1500       .. doxygenclass:: simgrid::s4u::LinkInRoute
1501
1502
1503    .. group-tab:: Python
1504    
1505       .. autoclass:: simgrid.Link
1506
1507 Basic management
1508 ----------------
1509
1510 .. tabs::
1511
1512    .. group-tab:: C++
1513
1514       .. code-block:: C++
1515
1516          #include <simgrid/s4u/Link.hpp>
1517
1518       Note that there is no LinkPtr type and that you cannot use the RAII
1519       idiom on hosts because SimGrid does not allow (yet) to create nor
1520       destroy resources once the simulation is started.
1521
1522       .. doxygenfunction:: simgrid::s4u::Link::seal()
1523
1524    .. group-tab:: Python
1525
1526       .. code:: Python
1527
1528          from simgrid import Link
1529
1530       .. automethod:: simgrid.Link.seal
1531
1532    .. group-tab:: C
1533
1534       .. code:: C
1535
1536          #include <simgrid/link.h>
1537
1538       .. doxygentypedef:: sg_link_t
1539       .. cpp:type:: const s4u_Link* const_sg_link_t
1540
1541          Pointer to a constant link object.
1542
1543 Retrieving links
1544 ----------------
1545
1546 .. tabs::
1547
1548    .. group-tab:: C++
1549
1550       See also :cpp:func:`simgrid::s4u::Engine::get_all_links`.
1551
1552       .. doxygenfunction:: simgrid::s4u::Link::by_name(const std::string &name)
1553       .. doxygenfunction:: simgrid::s4u::Link::by_name_or_null(const std::string &name)
1554
1555    .. group-tab:: Python
1556
1557       See also :py:attr:`simgrid.Engine.all_links`.
1558
1559       .. automethod:: simgrid.Link.by_name
1560       .. autoattribute:: simgrid.Link.name
1561
1562    .. group-tab:: C
1563
1564       .. doxygenfunction:: sg_link_by_name(const char *name)
1565       .. doxygenfunction:: sg_link_count()
1566       .. doxygenfunction:: sg_link_list()
1567
1568 Querying info
1569 --------------
1570
1571 .. tabs::
1572
1573    .. group-tab:: C++
1574
1575       .. doxygenfunction:: simgrid::s4u::Link::get_bandwidth() const
1576       .. doxygenfunction:: simgrid::s4u::Link::get_cname() const
1577       .. doxygenfunction:: simgrid::s4u::Link::get_latency() const
1578       .. doxygenfunction:: simgrid::s4u::Link::get_name() const
1579       .. doxygenfunction:: simgrid::s4u::Link::get_sharing_policy() const
1580       .. doxygenfunction:: simgrid::s4u::Link::get_usage() const
1581       .. doxygenfunction:: simgrid::s4u::Link::is_used() const
1582
1583    .. group-tab:: Python
1584
1585       .. autoattribute:: simgrid.Link.bandwidth
1586       .. autoattribute:: simgrid.Link.latency
1587
1588    .. group-tab:: C
1589
1590       .. doxygenfunction:: sg_link_get_bandwidth(const_sg_link_t link)
1591       .. doxygenfunction:: sg_link_get_latency(const_sg_link_t link)
1592       .. doxygenfunction:: sg_link_get_name(const_sg_link_t link)
1593       .. doxygenfunction:: sg_link_is_shared(const_sg_link_t link)
1594
1595 Modifying characteristics
1596 -------------------------
1597
1598 .. tabs::
1599
1600    .. group-tab:: C++
1601
1602       .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth(double value)
1603       .. doxygenfunction:: simgrid::s4u::Link::set_latency(double value)
1604       .. doxygenfunction:: simgrid::s4u::Link::set_latency(const std::string& value)
1605       .. doxygenfunction:: simgrid::s4u::Link::set_concurrency_limit(int limit)
1606       .. doxygenfunction:: simgrid::s4u::Link::set_sharing_policy(SharingPolicy policy, const NonLinearResourceCb& cb = {})
1607
1608    .. group-tab:: Python
1609
1610       .. automethod:: simgrid.Link.set_bandwidth
1611       .. automethod:: simgrid.Link.set_latency
1612       .. automethod:: simgrid.Link.set_concurrency_limit
1613       .. automethod:: simgrid.Link.set_sharing_policy
1614
1615    .. group-tab:: C
1616
1617       .. doxygenfunction:: sg_link_set_bandwidth(sg_link_t link, double value)
1618       .. doxygenfunction:: sg_link_set_latency(sg_link_t link, double value)
1619
1620 User data and properties
1621 ------------------------
1622
1623 .. tabs::
1624
1625    .. group-tab:: C++
1626
1627       .. doxygenfunction:: simgrid::s4u::Link::get_property(const std::string &key) const
1628       .. doxygenfunction:: simgrid::s4u::Link::set_property(const std::string &key, const std::string &value)
1629
1630    .. group-tab:: C
1631
1632       .. doxygenfunction:: sg_link_get_data(const_sg_link_t link)
1633       .. doxygenfunction:: sg_link_set_data(sg_link_t link, void *data)
1634
1635 On/Off
1636 ------
1637
1638 .. tabs::
1639
1640    .. group-tab:: C++
1641
1642       See also :cpp:func:`simgrid::s4u::Link::set_state_profile`.
1643
1644       .. doxygenfunction:: simgrid::s4u::Link::is_on() const
1645       .. doxygenfunction:: simgrid::s4u::Link::turn_off()
1646       .. doxygenfunction:: simgrid::s4u::Link::turn_on()
1647
1648    .. group-tab:: Python
1649
1650       See also :py:func:`simgrid.Link.set_state_profile`.
1651
1652       .. automethod:: simgrid.Link.is_on
1653       .. automethod:: simgrid.Link.turn_off
1654       .. automethod:: simgrid.Link.turn_on
1655
1656 Dynamic profiles
1657 ----------------
1658
1659 See :ref:`howto_churn` for more details.
1660
1661 .. tabs::
1662
1663    .. group-tab:: C++
1664
1665       .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth_profile(kernel::profile::Profile *profile)
1666       .. doxygenfunction:: simgrid::s4u::Link::set_latency_profile(kernel::profile::Profile *profile)
1667       .. doxygenfunction:: simgrid::s4u::Link::set_state_profile(kernel::profile::Profile *profile)
1668
1669    .. group-tab:: Python
1670
1671       .. automethod:: simgrid.Link.set_bandwidth_profile
1672       .. automethod:: simgrid.Link.set_latency_profile
1673       .. automethod:: simgrid.Link.set_state_profile
1674
1675 WIFI links
1676 ----------
1677
1678 .. tabs::
1679
1680    .. group-tab:: C++
1681
1682       .. doxygenfunction:: simgrid::s4u::Link::set_host_wifi_rate
1683
1684    .. group-tab:: Python
1685
1686       .. automethod:: simgrid.Link.set_host_wifi_rate
1687
1688 Signals
1689 -------
1690
1691 .. tabs::
1692
1693    .. group-tab:: C++
1694
1695       .. doxygenfunction:: simgrid::s4u::Link::on_bandwidth_change_cb
1696       .. doxygenfunction:: simgrid::s4u::Link::on_communication_state_change_cb
1697       .. doxygenfunction:: simgrid::s4u::Link::on_creation_cb
1698       .. doxygenfunction:: simgrid::s4u::Link::on_destruction_cb
1699       .. doxygenfunction:: simgrid::s4u::Link::on_state_change_cb
1700
1701 .. _API_s4u_NetZone:
1702
1703 ================
1704 ⁣  class NetZone
1705 ================
1706
1707 .. tabs::
1708
1709    .. group-tab:: C++
1710
1711       .. doxygenclass:: simgrid::s4u::NetZone
1712
1713    .. group-tab:: Python
1714    
1715       .. autoclass:: simgrid.NetZone
1716
1717 Basic management
1718 ----------------
1719
1720 .. tabs::
1721
1722    .. group-tab:: C++
1723
1724       .. code-block:: C++
1725
1726          #include <simgrid/s4u/NetZone.hpp>
1727
1728       Note that there is no NetZonePtr type and that you cannot use the RAII
1729       idiom on network zones because SimGrid does not allow (yet) to create nor
1730       destroy resources once the simulation is started.
1731
1732       .. doxygenfunction:: simgrid::s4u::NetZone::seal
1733
1734    .. group-tab:: Python
1735
1736       .. code:: Python
1737
1738          from simgrid import NetZone
1739
1740       .. automethod:: simgrid.NetZone.seal
1741
1742    .. group-tab:: C
1743
1744       .. code:: C
1745
1746          #include <simgrid/zone.h>
1747
1748       .. doxygentypedef:: sg_netzone_t
1749       .. cpp:type:: const s4u_NetZone* const_sg_netzone_t
1750
1751          Pointer to a constant network zone object.
1752
1753 Retrieving zones
1754 ----------------
1755
1756 .. tabs::
1757
1758    .. group-tab:: C++
1759
1760       See :cpp:func:`simgrid::s4u::Engine::get_netzone_root`,
1761       :cpp:func:`simgrid::s4u::Engine::netzone_by_name_or_null` and
1762       :cpp:func:`simgrid::s4u::Engine::get_filtered_netzones`.
1763
1764    .. group-tab:: C
1765
1766       .. doxygenfunction:: sg_zone_get_by_name(const char *name)
1767       .. doxygenfunction:: sg_zone_get_root()
1768
1769 Querying info
1770 --------------
1771
1772 .. tabs::
1773
1774    .. group-tab:: C++
1775
1776       .. doxygenfunction:: simgrid::s4u::NetZone::get_cname() const
1777       .. doxygenfunction:: simgrid::s4u::NetZone::get_name() const
1778       .. doxygenfunction:: simgrid::s4u::NetZone::get_netpoint()
1779
1780    .. group-tab:: Python
1781
1782       .. autoattribute:: simgrid.NetZone.name
1783       .. autoattribute:: simgrid.NetZone.netpoint
1784
1785    .. group-tab:: C
1786
1787       .. doxygenfunction:: sg_zone_get_name(const_sg_netzone_t zone)
1788
1789 User data and properties
1790 ------------------------
1791
1792 .. tabs::
1793
1794    .. group-tab:: C++
1795
1796       .. doxygenfunction:: simgrid::s4u::NetZone::get_properties() const
1797       .. doxygenfunction:: simgrid::s4u::NetZone::get_property(const std::string &key) const
1798       .. doxygenfunction:: simgrid::s4u::NetZone::set_property(const std::string &key, const std::string &value)
1799
1800    .. group-tab:: Python
1801
1802       .. automethod:: simgrid.NetZone.set_property
1803
1804    .. group-tab:: C
1805
1806       .. doxygenfunction:: sg_zone_get_property_value(const_sg_netzone_t as, const char *name)
1807       .. doxygenfunction:: sg_zone_set_property_value(sg_netzone_t netzone, const char *name, const char *value)
1808
1809 Retrieving components
1810 ---------------------
1811
1812 .. tabs::
1813
1814    .. group-tab:: C++
1815
1816       .. doxygenfunction:: simgrid::s4u::NetZone::get_all_hosts() const
1817       .. doxygenfunction:: simgrid::s4u::NetZone::get_host_count() const
1818
1819    .. group-tab:: C
1820
1821       .. doxygenfunction:: sg_zone_get_hosts(const_sg_netzone_t zone, xbt_dynar_t whereto)
1822
1823 Routing data
1824 ------------
1825
1826 .. tabs::
1827
1828    .. group-tab:: C++
1829
1830       .. doxygenfunction:: simgrid::s4u::NetZone::add_component(kernel::routing::NetPoint *elm)
1831       .. doxygenfunction:: simgrid::s4u::NetZone::add_route
1832       .. doxygenfunction:: simgrid::s4u::NetZone::add_bypass_route
1833       .. doxygenfunction:: simgrid::s4u::NetZone::get_children() const
1834       .. doxygenfunction:: simgrid::s4u::NetZone::get_parent() const
1835       .. doxygenfunction:: simgrid::s4u::NetZone::set_parent(const NetZone* parent)
1836
1837    .. group-tab:: Python
1838
1839       .. automethod:: simgrid.NetZone.add_route
1840       .. automethod:: simgrid.NetZone.set_parent
1841
1842    .. group-tab:: C
1843
1844       .. doxygenfunction:: sg_zone_get_sons(const_sg_netzone_t zone, xbt_dict_t whereto)
1845
1846 Signals
1847 -------
1848
1849 .. tabs::
1850
1851   .. group-tab:: C++
1852
1853      .. doxygenfunction:: simgrid::s4u::NetZone::on_creation_cb
1854      .. doxygenfunction:: simgrid::s4u::NetZone::on_seal_cb
1855
1856 Creating resources
1857 ------------------
1858
1859 Zones
1860 ^^^^^
1861 .. tabs::
1862
1863   .. group-tab:: C++
1864
1865      .. doxygenfunction:: simgrid::s4u::create_full_zone(const std::string& name)
1866      .. doxygenfunction:: simgrid::s4u::create_empty_zone(const std::string& name)
1867      .. doxygenfunction:: simgrid::s4u::create_star_zone(const std::string& name)
1868      .. doxygenfunction:: simgrid::s4u::create_dijkstra_zone(const std::string& name, bool cache)
1869      .. doxygenfunction:: simgrid::s4u::create_floyd_zone(const std::string& name)
1870      .. doxygenfunction:: simgrid::s4u::create_vivaldi_zone(const std::string& name)
1871      .. doxygenfunction:: simgrid::s4u::create_wifi_zone(const std::string& name)
1872      .. doxygenfunction:: simgrid::s4u::create_torus_zone
1873      .. doxygenfunction:: simgrid::s4u::create_fatTree_zone(const std::string& name, const NetZone* parent, const FatTreeParams& parameters, const ClusterCallbacks& set_callbacks, double bandwidth, double latency, Link::SharingPolicy sharing_policy)
1874      .. doxygenfunction:: simgrid::s4u::create_dragonfly_zone(const std::string& name, const NetZone* parent, const DragonflyParams& parameters, const ClusterCallbacks& set_callbacks, double bandwidth, double latency, Link::SharingPolicy sharing_policy)
1875
1876   .. group-tab:: Python
1877
1878      .. automethod:: simgrid.NetZone.create_full_zone
1879      .. automethod:: simgrid.NetZone.create_empty_zone
1880      .. automethod:: simgrid.NetZone.create_star_zone
1881      .. automethod:: simgrid.NetZone.create_dijkstra_zone
1882      .. automethod:: simgrid.NetZone.create_floyd_zone
1883      .. automethod:: simgrid.NetZone.create_vivaldi_zone
1884      .. automethod:: simgrid.NetZone.create_wifi_zone
1885      .. automethod:: simgrid.NetZone.create_torus_zone
1886      .. automethod:: simgrid.NetZone.create_fatTree_zone
1887      .. automethod:: simgrid.NetZone.create_dragonfly_zone
1888
1889 Hosts
1890 ^^^^^
1891
1892 .. tabs::
1893
1894   .. group-tab:: C++
1895
1896      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<double>& speed_per_pstate)
1897      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, double speed)
1898      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<std::string>& speed_per_pstate)
1899      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::string& speed)
1900
1901   .. group-tab:: Python
1902
1903      .. automethod:: simgrid.NetZone.create_host
1904
1905 Links
1906 ^^^^^
1907
1908 .. tabs::
1909
1910   .. group-tab:: C++
1911
1912      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<double>& bandwidths)
1913      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, double bandwidth)
1914      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<std::string>& bandwidthds)
1915      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::string& bandwidth)
1916      .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, const std::string& bandwidth)
1917      .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, double bandwidth)
1918
1919   .. group-tab:: Python
1920
1921      .. automethod:: simgrid.NetZone.create_link
1922      .. automethod:: simgrid.NetZone.create_split_duplex_link
1923
1924 Router
1925 ^^^^^^
1926
1927 .. tabs::
1928
1929   .. group-tab:: C++
1930
1931      .. doxygenfunction:: simgrid::s4u::NetZone::create_router(const std::string& name)
1932
1933   .. group-tab:: Python
1934
1935      .. automethod:: simgrid.NetZone.create_router
1936
1937 .. _API_s4u_VirtualMachine:
1938
1939 =======================
1940 ⁣  class VirtualMachine
1941 =======================
1942
1943
1944 .. doxygenclass:: simgrid::s4u::VirtualMachine
1945
1946 Basic management
1947 ----------------
1948 .. tabs::
1949
1950    .. group-tab:: C++
1951
1952       .. code-block:: C++
1953
1954          #include <simgrid/s4u/VirtualMachine.hpp>
1955
1956       Note that there is no VirtualMachinePtr type, and that you cannot use the RAII
1957       idiom on virtual machines. There is no good reason for that and should change in the future.
1958
1959    .. group-tab:: C
1960
1961       .. code:: C
1962
1963          #include <simgrid/vm.h>
1964
1965       .. doxygentypedef:: sg_vm_t
1966       .. cpp:type:: const s4u_VirtualMachine* const_sg_vm_t
1967
1968          Pointer to a constant virtual machine object.
1969
1970 Creating VMs
1971 ------------
1972
1973 .. tabs::
1974
1975    .. group-tab:: C++
1976
1977       .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount)
1978       .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount, size_t ramsize)
1979       .. doxygenfunction:: simgrid::s4u::VirtualMachine::destroy
1980
1981    .. group-tab:: C
1982
1983       .. doxygenfunction:: sg_vm_create_core
1984       .. doxygenfunction:: sg_vm_create_multicore
1985       .. doxygenfunction:: sg_vm_destroy
1986
1987 Querying info
1988 --------------
1989
1990 .. tabs::
1991
1992    .. group-tab:: C++
1993
1994       .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_pm() const
1995       .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_ramsize() const
1996       .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_state() const
1997
1998       .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_bound(double bound)
1999       .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_pm(Host *pm)
2000       .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_ramsize(size_t ramsize)
2001
2002    .. group-tab:: C
2003
2004       .. doxygenfunction:: sg_vm_get_ramsize(const_sg_vm_t vm)
2005       .. doxygenfunction:: sg_vm_set_bound(sg_vm_t vm, double bound)
2006       .. doxygenfunction:: sg_vm_set_ramsize(sg_vm_t vm, size_t size)
2007
2008       .. doxygenfunction:: sg_vm_get_name
2009       .. doxygenfunction:: sg_vm_get_pm
2010       .. doxygenfunction:: sg_vm_is_created
2011       .. doxygenfunction:: sg_vm_is_running
2012       .. doxygenfunction:: sg_vm_is_suspended
2013
2014 Life cycle
2015 ----------
2016
2017 .. tabs::
2018
2019    .. group-tab:: C++
2020
2021       .. doxygenfunction:: simgrid::s4u::VirtualMachine::resume()
2022       .. doxygenfunction:: simgrid::s4u::VirtualMachine::shutdown()
2023       .. doxygenfunction:: simgrid::s4u::VirtualMachine::start()
2024       .. doxygenfunction:: simgrid::s4u::VirtualMachine::suspend()
2025
2026    .. group-tab:: C
2027
2028       .. doxygenfunction:: sg_vm_start
2029       .. doxygenfunction:: sg_vm_suspend
2030       .. doxygenfunction:: sg_vm_resume
2031       .. doxygenfunction:: sg_vm_shutdown
2032
2033 Signals
2034 -------
2035
2036 .. tabs::
2037
2038    .. group-tab:: C++
2039
2040       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_creation_cb
2041       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_destruction_cb
2042       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_end_cb
2043       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_start_cb
2044       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_resume_cb
2045       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_shutdown_cb
2046       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_start_cb
2047       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_started_cb
2048       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_suspend_cb
2049
2050 .. _API_s4u_Activity:
2051
2052 ==========
2053 Activities
2054 ==========
2055
2056 ==============
2057 class Activity
2058 ==============
2059
2060 .. doxygenclass:: simgrid::s4u::Activity
2061
2062 **Known subclasses:**
2063 :ref:`Communications <API_s4u_Comm>` (started on Mailboxes and consuming links),
2064 :ref:`Executions <API_s4u_Exec>` (started on Host and consuming CPU resources)
2065 :ref:`I/O <API_s4u_Io>` (started on and consuming disks).
2066 See also the :ref:`section on activities <s4u_Activities>` above.
2067
2068 Basic management
2069 ----------------
2070
2071 .. tabs::
2072
2073    .. group-tab:: C++
2074
2075       .. code-block:: C++
2076
2077          #include <simgrid/s4u/Activity.hpp>
2078
2079       .. doxygentypedef:: ActivityPtr
2080
2081 Querying info
2082 -------------
2083
2084 .. tabs::
2085
2086    .. group-tab:: C++
2087
2088       .. doxygenfunction:: simgrid::s4u::Activity::get_cname
2089       .. doxygenfunction:: simgrid::s4u::Activity::get_name
2090       .. doxygenfunction:: simgrid::s4u::Activity::get_remaining() const
2091       .. doxygenfunction:: simgrid::s4u::Activity::get_state() const
2092       .. doxygenfunction:: simgrid::s4u::Activity::set_remaining(double remains)
2093       .. doxygenfunction:: simgrid::s4u::Activity::set_state(Activity::State state)
2094
2095
2096 Activities life cycle
2097 ---------------------
2098
2099 .. tabs::
2100
2101    .. group-tab:: C++
2102
2103       .. doxygenfunction:: simgrid::s4u::Activity::start
2104       .. doxygenfunction:: simgrid::s4u::Activity::cancel
2105       .. doxygenfunction:: simgrid::s4u::Activity::test
2106       .. doxygenfunction:: simgrid::s4u::Activity::wait
2107       .. doxygenfunction:: simgrid::s4u::Activity::wait_for
2108       .. doxygenfunction:: simgrid::s4u::Activity::wait_until(double time_limit)
2109       .. doxygenfunction:: simgrid::s4u::Activity::vetoable_start()
2110
2111 Suspending and resuming an activity
2112 -----------------------------------
2113
2114 .. tabs::
2115
2116    .. group-tab:: C++
2117
2118       .. doxygenfunction:: simgrid::s4u::Activity::suspend
2119       .. doxygenfunction:: simgrid::s4u::Activity::resume
2120       .. doxygenfunction:: simgrid::s4u::Activity::is_suspended
2121
2122 .. _API_s4u_Comm:
2123
2124 =============
2125 ⁣  class Comm
2126 =============
2127
2128 .. tabs::
2129
2130    .. group-tab:: C++
2131
2132       .. doxygenclass:: simgrid::s4u::Comm
2133
2134    .. group-tab:: Python
2135    
2136       .. autoclass:: simgrid.Comm
2137
2138 Basic management
2139 ----------------
2140
2141 .. tabs::
2142
2143    .. group-tab:: C++
2144
2145       .. code-block:: C++
2146
2147          #include <simgrid/s4u/Comm.hpp>
2148
2149       .. doxygentypedef:: CommPtr
2150
2151    .. group-tab:: Python
2152
2153       .. code:: Python
2154
2155          from simgrid import Comm
2156
2157    .. group-tab:: c
2158
2159       .. code:: c
2160
2161          #include <simgrid/comm.h>
2162
2163       .. doxygentypedef:: sg_comm_t
2164
2165 Querying info
2166 -------------
2167
2168 .. tabs::
2169
2170    .. group-tab:: C++
2171
2172       .. doxygenfunction:: simgrid::s4u::Comm::get_dst_data_size() const
2173       .. doxygenfunction:: simgrid::s4u::Comm::get_mailbox() const
2174       .. doxygenfunction:: simgrid::s4u::Comm::get_sender() const
2175       .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff)
2176       .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff, size_t size)
2177       .. doxygenfunction:: simgrid::s4u::Comm::detach()
2178       .. doxygenfunction:: simgrid::s4u::Comm::detach(void(*clean_function)(void *))
2179       .. doxygenfunction:: simgrid::s4u::Comm::set_payload_size(uint64_t bytes)
2180       .. doxygenfunction:: simgrid::s4u::Comm::set_rate(double rate)
2181       .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff)
2182       .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff, size_t size)
2183       .. doxygenfunction:: simgrid::s4u::Comm::set_src_data_size(size_t size)
2184
2185 Life cycle
2186 ----------
2187
2188 Most communications are created using :ref:`s4u_mailbox`, but you can
2189 also start direct communications as shown below.
2190
2191 .. tabs::
2192
2193    .. group-tab:: C++
2194
2195       .. doxygenfunction:: simgrid::s4u::Comm::sendto
2196       .. doxygenfunction:: simgrid::s4u::Comm::sendto_init()
2197       .. doxygenfunction:: simgrid::s4u::Comm::sendto_init(Host *from, Host *to)
2198       .. doxygenfunction:: simgrid::s4u::Comm::sendto_async
2199
2200       .. doxygenfunction:: simgrid::s4u::Comm::cancel
2201       .. doxygenfunction:: simgrid::s4u::Comm::start
2202       .. doxygenfunction:: simgrid::s4u::Comm::test
2203       .. doxygenfunction:: simgrid::s4u::Comm::test_any(const std::vector< CommPtr >& comms)
2204       .. doxygenfunction:: simgrid::s4u::Comm::wait
2205       .. doxygenfunction:: simgrid::s4u::Comm::wait_all(const std::vector< CommPtr >& comms)
2206       .. doxygenfunction:: simgrid::s4u::Comm::wait_all_for(const std::vector< CommPtr >& comms, double timeout)
2207       .. doxygenfunction:: simgrid::s4u::Comm::wait_any(const std::vector< CommPtr >& comms)
2208       .. doxygenfunction:: simgrid::s4u::Comm::wait_any_for(const std::vector< CommPtr >& comms, double timeout)
2209       .. doxygenfunction:: simgrid::s4u::Comm::wait_for
2210
2211    .. group-tab:: Python
2212
2213       .. automethod:: simgrid.Comm.test
2214       .. automethod:: simgrid.Comm.wait
2215       .. automethod:: simgrid.Comm.wait_for
2216       .. automethod:: simgrid.Comm.wait_all
2217       .. automethod:: simgrid.Comm.wait_any
2218       .. automethod:: simgrid.Comm.wait_any_for
2219
2220    .. group-tab:: C
2221
2222       .. doxygenfunction:: sg_comm_test
2223       .. doxygenfunction:: sg_comm_wait
2224       .. doxygenfunction:: sg_comm_wait_all
2225       .. doxygenfunction:: sg_comm_wait_any
2226
2227 Signals
2228 -------
2229
2230 .. tabs::
2231
2232    .. group-tab:: C++
2233
2234       .. doxygenfunction:: simgrid::s4u::Comm::on_start_cb
2235       .. doxygenfunction:: simgrid::s4u::Comm::on_completion_cb
2236       .. doxygenfunction:: simgrid::s4u::Comm::on_recv_cb
2237       .. doxygenfunction:: simgrid::s4u::Comm::on_send_cb
2238
2239 .. _API_s4u_Exec:
2240
2241 =============
2242 ⁣  class Exec
2243 =============
2244
2245 .. tabs::
2246
2247    .. group-tab:: C++
2248
2249       .. doxygenclass:: simgrid::s4u::Exec
2250
2251    .. group-tab:: Python
2252    
2253       .. autoclass:: simgrid.Exec
2254
2255 Basic management
2256 ----------------
2257
2258 .. tabs::
2259
2260    .. group-tab:: C++
2261
2262       .. code-block:: C++
2263
2264          #include <simgrid/s4u/Exec.hpp>
2265
2266       .. doxygentypedef:: ExecPtr
2267
2268    .. group-tab:: Python
2269
2270       .. code:: Python
2271
2272          from simgrid import Exec
2273
2274    .. group-tab:: C
2275
2276       .. code-block:: C
2277
2278          #include <simgrid/exec.h>
2279
2280       .. doxygentypedef:: sg_exec_t
2281       .. doxygentypedef:: const_sg_exec_t
2282
2283 Querying info
2284 -------------
2285
2286 .. tabs::
2287
2288    .. group-tab:: C++
2289
2290       .. doxygenfunction:: simgrid::s4u::Exec::get_cost() const
2291       .. doxygenfunction:: simgrid::s4u::Exec::get_finish_time() const
2292       .. doxygenfunction:: simgrid::s4u::Exec::get_host() const
2293       .. doxygenfunction:: simgrid::s4u::Exec::get_host_number() const
2294       .. doxygenfunction:: simgrid::s4u::Exec::get_remaining
2295       .. doxygenfunction:: simgrid::s4u::Exec::get_remaining_ratio
2296       .. doxygenfunction:: simgrid::s4u::Exec::get_start_time() const
2297       .. doxygenfunction:: simgrid::s4u::Exec::set_bound(double bound)
2298       .. doxygenfunction:: simgrid::s4u::Exec::set_host
2299       .. doxygenfunction:: simgrid::s4u::Exec::set_priority(double priority)
2300
2301    .. group-tab:: Python
2302
2303       .. autoattribute:: simgrid.Exec.host
2304       .. autoattribute:: simgrid.Exec.remaining
2305       .. autoattribute:: simgrid.Exec.remaining_ratio
2306
2307    .. group-tab:: C
2308
2309       .. doxygenfunction:: sg_exec_set_bound(sg_exec_t exec, double bound)
2310       .. doxygenfunction:: sg_exec_get_name(const_sg_exec_t exec)
2311       .. doxygenfunction:: sg_exec_set_name(sg_exec_t exec, const char* name)
2312       .. doxygenfunction:: sg_exec_set_host(sg_exec_t exec, sg_host_t new_host)
2313       .. doxygenfunction:: sg_exec_get_remaining(const_sg_exec_t exec)
2314       .. doxygenfunction:: sg_exec_get_remaining_ratio(const_sg_exec_t exec)
2315
2316 Life cycle
2317 ----------
2318
2319 .. tabs::
2320
2321    .. group-tab:: C++
2322
2323       .. doxygenfunction:: simgrid::s4u::Exec::cancel
2324       .. doxygenfunction:: simgrid::s4u::Exec::start
2325       .. doxygenfunction:: simgrid::s4u::Exec::test
2326       .. doxygenfunction:: simgrid::s4u::Exec::wait
2327       .. doxygenfunction:: simgrid::s4u::Exec::wait_any(const std::vector< ExecPtr >& execs)
2328       .. doxygenfunction:: simgrid::s4u::Exec::wait_any_for(const std::vector< ExecPtr >& execs, double timeout)
2329       .. doxygenfunction:: simgrid::s4u::Exec::wait_for
2330
2331    .. group-tab:: Python
2332
2333        .. automethod:: simgrid.Exec.cancel
2334        .. automethod:: simgrid.Exec.start
2335        .. automethod:: simgrid.Exec.test
2336        .. automethod:: simgrid.Exec.wait
2337
2338    .. group-tab:: C
2339
2340        .. doxygenfunction:: sg_exec_start(sg_exec_t exec)
2341        .. doxygenfunction:: sg_exec_cancel(sg_exec_t exec);
2342        .. doxygenfunction:: sg_exec_test(sg_exec_t exec);
2343        .. doxygenfunction:: sg_exec_wait(sg_exec_t exec);
2344        .. doxygenfunction:: sg_exec_wait_for(sg_exec_t exec, double timeout);
2345        .. doxygenfunction:: sg_exec_wait_any_for(sg_exec_t* execs, size_t count, double timeout);
2346        .. doxygenfunction:: sg_exec_wait_any(sg_exec_t* execs, size_t count);
2347
2348 Signals
2349 -------
2350
2351 .. tabs::
2352
2353    .. group-tab:: C++
2354
2355       .. doxygenfunction:: simgrid::s4u::Exec::on_start_cb
2356       .. doxygenfunction:: simgrid::s4u::Exec::on_completion_cb
2357
2358 .. _API_s4u_Io:
2359
2360 ===========
2361 ⁣  class Io
2362 ===========
2363
2364 .. tabs::
2365
2366    .. group-tab:: C++
2367
2368       .. doxygenclass:: simgrid::s4u::Io
2369
2370    .. group-tab:: Python
2371    
2372       .. autoclass:: simgrid.Io
2373
2374 Basic management
2375 ----------------
2376
2377 .. tabs::
2378
2379    .. group-tab:: C++
2380
2381       .. code-block:: C++
2382
2383          #include <simgrid/s4u/Io.hpp>
2384
2385       .. doxygentypedef:: IoPtr
2386
2387 Querying info
2388 -------------
2389
2390 .. tabs::
2391
2392    .. group-tab:: C++
2393
2394       .. doxygenfunction:: simgrid::s4u::Io::get_performed_ioops() const
2395       .. doxygenfunction:: simgrid::s4u::Io::get_remaining
2396
2397 Life cycle
2398 ----------
2399
2400 .. tabs::
2401
2402    .. group-tab:: C++
2403
2404       .. doxygenfunction:: simgrid::s4u::Io::cancel
2405       .. doxygenfunction:: simgrid::s4u::Io::start
2406       .. doxygenfunction:: simgrid::s4u::Io::test
2407       .. doxygenfunction:: simgrid::s4u::Io::wait
2408       .. doxygenfunction:: simgrid::s4u::Io::wait_for
2409       .. doxygenfunction:: simgrid::s4u::Io::wait_any
2410       .. doxygenfunction:: simgrid::s4u::Io::wait_any_for
2411
2412    .. group-tab:: Python
2413
2414       .. automethod:: simgrid.Io.test
2415       .. automethod:: simgrid.Io.wait
2416       .. automethod:: simgrid.Io.wait_any_for
2417       .. automethod:: simgrid.Io.wait_any
2418
2419 Signals
2420 -------
2421
2422 .. tabs::
2423
2424    .. group-tab:: C++
2425
2426       .. doxygenfunction:: simgrid::s4u::Io::on_start_cb
2427       .. doxygenfunction:: simgrid::s4u::Io::on_completion_cb
2428
2429 .. _API_s4u_Synchronizations:
2430
2431 =======================
2432 Synchronization Objects
2433 =======================
2434
2435 .. _API_s4u_Mutex:
2436
2437 ==============
2438 ⁣  Mutex
2439 ==============
2440
2441 .. doxygenclass:: simgrid::s4u::Mutex
2442
2443 Basic management
2444 ----------------
2445
2446    .. tabs::
2447
2448       .. group-tab:: C++
2449
2450          .. code-block:: C++
2451
2452             #include <simgrid/s4u/Mutex.hpp>
2453
2454          .. doxygentypedef:: MutexPtr
2455
2456          .. doxygenfunction:: simgrid::s4u::Mutex::create()
2457
2458       .. group-tab:: C
2459
2460          .. code-block:: C
2461
2462             #include <simgrid/mutex.h>
2463
2464          .. doxygentypedef:: sg_mutex_t
2465          .. cpp:type:: const s4u_Mutex* const_sg_mutex_t
2466
2467             Pointer to a constant mutex object.
2468
2469          .. doxygenfunction:: sg_mutex_init()
2470          .. doxygenfunction:: sg_mutex_destroy(const_sg_mutex_t mutex)
2471
2472 Locking
2473 -------
2474
2475    .. tabs::
2476
2477       .. group-tab:: C++
2478
2479          .. doxygenfunction:: simgrid::s4u::Mutex::lock()
2480          .. doxygenfunction:: simgrid::s4u::Mutex::try_lock()
2481          .. doxygenfunction:: simgrid::s4u::Mutex::unlock()
2482
2483       .. group-tab:: C
2484
2485          .. doxygenfunction:: sg_mutex_lock(sg_mutex_t mutex)
2486          .. doxygenfunction:: sg_mutex_try_lock(sg_mutex_t mutex)
2487          .. doxygenfunction:: sg_mutex_unlock(sg_mutex_t mutex)
2488
2489 .. _API_s4u_Barrier:
2490
2491 ================
2492 ⁣  Barrier
2493 ================
2494
2495 .. doxygenclass:: simgrid::s4u::Barrier
2496
2497 .. tabs::
2498
2499    .. group-tab:: C++
2500
2501       .. code-block:: C++
2502
2503          #include <simgrid/s4u/Barrier.hpp>
2504
2505       .. doxygentypedef:: BarrierPtr
2506
2507       .. doxygenfunction:: simgrid::s4u::Barrier::Barrier(unsigned int expected_actors)
2508       .. doxygenfunction:: simgrid::s4u::Barrier::create(unsigned int expected_actors)
2509       .. doxygenfunction:: simgrid::s4u::Barrier::wait()
2510
2511    .. group-tab:: C
2512
2513       .. code-block:: C
2514
2515          #include <simgrid/barrier.hpp>
2516
2517       .. doxygentypedef:: sg_bar_t
2518
2519       .. doxygenfunction:: sg_barrier_init(unsigned int count)
2520       .. doxygenfunction:: sg_barrier_destroy(sg_bar_t bar)
2521       .. doxygenfunction:: sg_barrier_wait(sg_bar_t bar)
2522
2523
2524 .. _API_s4u_ConditionVariable:
2525
2526 ==========================
2527 ⁣  Condition variable
2528 ==========================
2529
2530 .. doxygenclass:: simgrid::s4u::ConditionVariable
2531
2532 Basic management
2533 ----------------
2534
2535    .. tabs::
2536
2537       .. group-tab:: C++
2538
2539          .. code-block:: C++
2540
2541             #include <simgrid/s4u/ConditionVariable.hpp>
2542
2543          .. doxygentypedef:: ConditionVariablePtr
2544
2545          .. doxygenfunction:: simgrid::s4u::ConditionVariable::create()
2546
2547       .. group-tab:: C
2548
2549          .. code-block:: C
2550
2551             #include <simgrid/cond.h>
2552
2553          .. doxygentypedef:: sg_cond_t
2554          .. doxygentypedef:: const_sg_cond_t
2555          .. doxygenfunction:: sg_cond_init
2556          .. doxygenfunction:: sg_cond_destroy
2557
2558 Waiting and notifying
2559 ---------------------
2560
2561    .. tabs::
2562
2563       .. group-tab:: C++
2564
2565          .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_all()
2566          .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_one()
2567          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(s4u::MutexPtr lock)
2568          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< s4u::Mutex > &lock)
2569          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< Mutex > &lock, P pred)
2570          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration)
2571          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration, P pred)
2572          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration)
2573          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration, P pred)
2574          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time)
2575          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time, P pred)
2576          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time)
2577          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time, P pred)
2578
2579       .. group-tab:: C
2580
2581          .. doxygenfunction:: sg_cond_notify_all
2582          .. doxygenfunction:: sg_cond_notify_one
2583          .. doxygenfunction:: sg_cond_wait
2584          .. doxygenfunction:: sg_cond_wait_for
2585
2586 .. _API_s4u_Semaphore:
2587
2588 ==================
2589 ⁣  Semaphore
2590 ==================
2591
2592 .. doxygenclass:: simgrid::s4u::Semaphore
2593
2594
2595 Basic management
2596 ----------------
2597
2598    .. tabs::
2599
2600       .. group-tab:: C++
2601
2602          .. code-block:: C++
2603
2604             #include <simgrid/s4u/Semaphore.hpp>
2605
2606          .. doxygentypedef:: SemaphorePtr
2607          .. doxygenfunction:: simgrid::s4u::Semaphore::create(unsigned int initial_capacity)
2608
2609       .. group-tab:: C
2610
2611          .. code-block:: C
2612
2613             #include <simgrid/semaphore.h>
2614
2615          .. doxygentypedef:: sg_sem_t
2616          .. cpp:type:: const s4u_Semaphore* const_sg_sem_t
2617
2618             Pointer to a constant semaphore object.
2619
2620          .. doxygenfunction:: sg_sem_init(int initial_value)
2621          .. doxygenfunction:: sg_sem_destroy(const_sg_sem_t sem)
2622
2623 Locking
2624 -------
2625
2626    .. tabs::
2627
2628       .. group-tab:: C++
2629
2630          .. doxygenfunction:: simgrid::s4u::Semaphore::acquire()
2631          .. doxygenfunction:: simgrid::s4u::Semaphore::acquire_timeout(double timeout)
2632          .. doxygenfunction:: simgrid::s4u::Semaphore::get_capacity() const
2633          .. doxygenfunction:: simgrid::s4u::Semaphore::release()
2634          .. doxygenfunction:: simgrid::s4u::Semaphore::would_block() const
2635
2636       .. group-tab:: C
2637
2638          .. doxygenfunction:: sg_sem_acquire(sg_sem_t sem)
2639          .. doxygenfunction:: sg_sem_acquire_timeout(sg_sem_t sem, double timeout)
2640          .. doxygenfunction:: sg_sem_get_capacity(const_sg_sem_t sem)
2641          .. doxygenfunction:: sg_sem_release(sg_sem_t sem)
2642          .. doxygenfunction:: sg_sem_would_block(const_sg_sem_t sem)
2643
2644 .. |hr| raw:: html
2645
2646    <hr />