[exec.run.loop.general] (original) (raw)
33 Execution control library [exec]
33.12 Execution contexts [exec.ctx]
33.12.1 execution​::​run_loop [exec.run.loop]
33.12.1.1 General [exec.run.loop.general]
A run_loop is an execution resource on which work can be scheduled.
It maintains a thread-safe first-in-first-out queue of work.
Its run member function removes elements from the queue and executes them in a loop on the thread of execution that calls run.
A run_loop instance has an associated countthat corresponds to the number of work items that are in its queue.
Additionally, a run_loop instance has an associated state that can be one ofstarting, running, finishing, or finished.
Concurrent invocations of the member functions of run_loopother than run and its destructor do not introduce data races.
The member functions_pop-front_, push-back, and finishexecute atomically.
Recommended practice: Implementations should use an intrusive queue of operation states to hold the work units to make scheduling allocation-free.
namespace std::execution { class run_loop { class run-loop-scheduler; class run-loop-sender; struct run-loop-opstate-base { virtual void execute() = 0; run_loop* loop; run-loop-opstate-base* next; };template<class Rcvr> using run-loop-opstate = unspecified; run-loop-opstate-base* pop-front(); void push-back(run-loop-opstate-base*); public: run_loop() noexcept; run_loop(run_loop&&) = delete;~run_loop();run-loop-scheduler get_scheduler();void run();void finish();};}