+.. _s4u_ex_activityset:
+
+Bags of activities
+==================
+
+Sometimes, you want to block on a set of activities, getting unblocked when any activity of the set unblocks, or waiting for the
+completion of all activities in the set. This is where the ActivitySet become useful.
+
+Waiting for all activities 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/activityset-waitall/s4u-activityset-waitall.cpp
+
+ See also :cpp:func:`simgrid::s4u::ActivitySet::wait_all()`.
+
+ .. example-tab:: examples/python/activityset-waitall/activityset-waitall.py
+
+ See also :py:func:`simgrid.ActivitySet.wait_all()`.
+
+ .. example-tab:: examples/c/activityset-waitall/activityset-waitall.c
+
+ See also :cpp:func:`sg_activityset_wait_all()`.
+
+Waiting for all activities in a set (with timeout)
+--------------------------------------------------
+
+The ``wait_all_for()`` function is very similar to ``wait_all()`` but allows to specify a timeout.
+
+.. tabs::
+
+ .. example-tab:: examples/cpp/activityset-waitallfor/s4u-activityset-waitallfor.cpp
+
+ See also :cpp:func:`simgrid::s4u::ActivitySet::wait_all_for()`.
+
+ .. example-tab:: examples/python/activityset-waitallfor/activityset-waitallfor.py
+
+ See also :py:func:`simgrid.ActivitySet.wait_all_for()`.
+
+ .. example-tab:: examples/c/activityset-waitallfor/activityset-waitallfor.c
+
+ See also :cpp:func:`sg_activityset_wait_all_for()`.
+
+Waiting for the first completed activity in a set
+-------------------------------------------------
+
+The ``wait_any()`` blocks until one activity of the set completes, no matter which terminates first.
+
+.. tabs::
+
+ .. example-tab:: examples/cpp/activityset-waitany/s4u-activityset-waitany.cpp
+
+ See also :cpp:func:`simgrid::s4u::ActivitySet::wait_any()`.
+
+ .. example-tab:: examples/python/activityset-waitany/activityset-waitany.py
+
+ See also :py:func:`simgrid.ActivitySet.wait_any()`.
+
+ .. example-tab:: examples/c/activityset-waitany/activityset-waitany.c
+
+ See also :cpp:func:`sg_activityset_wait_any`.
+
+Testing whether at least one activity completed
+-----------------------------------------------
+
+The ``test_any()`` returns whether at least one activity of the set has completed.
+
+.. tabs::
+
+ .. example-tab:: examples/cpp/activityset-testany/s4u-activityset-testany.cpp
+
+ See also :cpp:func:`simgrid::s4u::ActivitySet::test_any()`.
+
+ .. example-tab:: examples/python/activityset-testany/activityset-testany.py
+
+ See also :py:func:`simgrid.ActivitySet.test_any()`.
+
+ .. example-tab:: examples/c/activityset-testany/activityset-testany.c
+
+ See also :cpp:func:`sg_activityset_test_any`.
+