+Waiting for communications with timeouts
+----------------------------------------
+
+There is two ways of declaring timeouts in SimGrid. ``waituntil`` let you specify the deadline until when you want to wait, while
+``waitfor`` expects the maximal wait duration.
+This example is very similar to the previous one, simply adding how to declare timeouts when waiting on asynchronous communication.
+
+.. tabs::
+
+ .. example-tab:: examples/cpp/comm-waituntil/s4u-comm-waituntil.cpp
+
+ See also :cpp:func:`simgrid::s4u::Activity::wait_until()` and :cpp:func:`simgrid::s4u::Comm::wait_for()`.
+
+ .. example-tab:: examples/python/comm-waituntil/comm-waituntil.py
+
+ See also :py:func:`simgrid.Comm.wait_until()`
+
+.. _s4u_ex_mailbox_ready:
+
+Checking for incoming communications
+------------------------------------
+
+This example uses ``Mailbox.ready()`` to check for completed communications. When this function returns true, then at least a message
+is arrived, so you know that ``Mailbox.get()`` will complete imediately. This is thus another way toward asynchronous communications.
+
+.. tabs::
+
+ .. example-tab:: examples/cpp/comm-ready/s4u-comm-ready.cpp
+
+ See also :cpp:func:`simgrid::s4u::Mailbox::ready()`.
+
+ .. example-tab:: examples/python/comm-ready/comm-ready.py
+
+ See also :py:func:`simgrid.Mailbox.ready()`
+
+
+Suspending communications
+-------------------------
+
+The ``suspend()`` and ``resume()`` functions block the progression of a given communication for a while and then unblock it.
+``is_suspended()`` returns whether that activity is currently blocked or not.
+
+.. tabs::
+
+ .. example-tab:: examples/cpp/comm-suspend/s4u-comm-suspend.cpp
+
+ See also :cpp:func:`simgrid::s4u::Activity::suspend()`
+ :cpp:func:`simgrid::s4u::Activity::resume()` and
+ :cpp:func:`simgrid::s4u::Activity::is_suspended()`.
+
+ .. example-tab:: examples/python/comm-suspend/comm-suspend.py
+
+ See also :py:func:`simgrid.Comm.suspend()` and
+ :py:func:`simgrid.Comm.resume()`.
+
+Waiting for all communications in a set
+---------------------------------------
+
+The ``wait_all()`` function is useful when you want to block until all activities in a given set have been completed.
+
+.. tabs::
+
+ .. example-tab:: examples/cpp/comm-waitall/s4u-comm-waitall.cpp
+
+ See also :cpp:func:`simgrid::s4u::Comm::wait_all()`.
+
+ .. example-tab:: examples/python/comm-waitall/comm-waitall.py
+
+ See also :py:func:`simgrid.Comm.wait_all()`.
+
+ .. example-tab:: examples/c/comm-waitall/comm-waitall.c
+
+ See also :cpp:func:`sg_comm_wait_all()`.
+
+Waiting for the first completed communication in a set
+------------------------------------------------------
+
+The ``wait_any()`` blocks until one activity of the set completes, no matter which terminates first.
+
+.. tabs::
+
+ .. example-tab:: examples/cpp/comm-waitany/s4u-comm-waitany.cpp
+
+ See also :cpp:func:`simgrid::s4u::Comm::wait_any()`.
+
+ .. example-tab:: examples/python/comm-waitany/comm-waitany.py
+
+ See also :py:func:`simgrid.Comm.wait_any()`.
+
+ .. example-tab:: examples/c/comm-waitany/comm-waitany.c
+
+ See also :cpp:func:`sg_comm_wait_any`.
+
+Testing whether at least one communication completed
+----------------------------------------------------
+
+The ``test_any()`` returns whether at least one activity of the set has completed, or -1.
+
+.. tabs::
+
+ .. example-tab:: examples/cpp/comm-testany/s4u-comm-testany.cpp