Logo AND Algorithmique Numérique Distribuée

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