Extension API - libfork documentation (original) (raw)
Toggle table of contents sidebar
Worker API¶
using lf::ext::nullary_function_t = std::function<void()>¶
A type-erased function object that takes no arguments.
using lf::ext::task_handle = impl::task_t*¶
An alias for a pointer to a task_t.
using lf::ext::submit_handle = impl::submit_node_t*¶
An alias for a pointer to a submit_t wrapped in an intruded list.
Lifetime management¶
A worker thread is registered/destroyed by calling the appropriate functions:
inline auto lf::ext::worker_init(nullary_function_t notify) -> worker_context*¶
Initialize thread-local variables for a worker.
Returns a handle to the library-managed context for the worker, this context is associated exclusively with the thread that called this function.
Warning
This return value should be cleaned up with lf::ext::finalize().
Parameters:
notify – Called when a task is submitted to a worker, this may be called concurrently.
inline void lf::ext::finalize(worker_context *worker)¶
Clean-up thread-local variable before destructing a worker’s context.
This must be called by the same worker (thread) which called [lf::ext::worker_init()](#namespacelf%5F1%5F1ext%5F1af8d4f6739a481c9a69b8cb21a3bd7ca8).
Warning
These must have been initialized with worker_init(...).
A worker’s context¶
class worker_context : private lf::impl::immovable<context>¶
Context for (extension) schedulers to interact with.
Each worker thread stores a context object, this is managed by the library. Internally a context manages the work stealing queue and the submission queue. Submissions to the submission queue trigger a user-supplied notification.
Public Functions
inline void schedule(submit_handle jobs)¶
schedule suspended tasks to the context, supports concurrent submission.
This will trigger the notification function.
inline auto try_pop_all() noexcept -> submit_handle¶
Fetch a linked-list of the submitted tasks, for use only by the owning worker thread.
If there are no submitted tasks, then returned pointer will be null.
inline auto try_steal() noexcept -> steal_t<task_handle>¶
Attempt a steal operation from this contexts task deque, supports concurrent stealing.
Worker functions¶
inline void lf::ext::resume(task_handle ptr)¶
Resume a stolen task.
This thread must be a worker thread.
inline void lf::ext::resume(submit_handle ptr)¶
Resume a collection of tasks at a submission point.
This thread must be the worker thread that the tasks were submitted to.