Logo AND Algorithmique Numérique Distribuée

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