The Gaudi Framework  master (bdbe7744)
Loading...
Searching...
No Matches
FiberManager.h
Go to the documentation of this file.
1
2/***********************************************************************************\
3* (c) Copyright 1998-2026 CERN for the benefit of the LHCb and ATLAS collaborations *
4* *
5* This software is distributed under the terms of the Apache version 2 licence, *
6* copied verbatim in the file "LICENSE". *
7* *
8* In applying this licence, CERN does not waive the privileges and immunities *
9* granted to it by virtue of its status as an Intergovernmental Organization *
10* or submit itself to any jurisdiction. *
11\***********************************************************************************/
12#pragma once
13#include <boost/fiber/algo/shared_work.hpp>
14#include <boost/fiber/condition_variable.hpp>
15#include <boost/fiber/fiber.hpp>
16#include <boost/fiber/mutex.hpp>
17
18#include <thread>
31
33
34public:
46 FiberManager( int n_threads );
48
61 template <typename F>
62 void schedule( F&& func ) {
63 // Add a new fiber invoking the function to the shared work queue, then notify the workers in case they where
64 // sleeping.
65 boost::fibers::fiber( boost::fibers::launch::post, std::forward<F>( func ) ).detach();
66 for ( auto* p : m_schedAlgoList ) { p->notify(); }
67 }
68
69private:
70 using SchedAlgo = boost::fibers::algo::shared_work;
71 boost::fibers::condition_variable m_shuttingDown_cv{};
72 boost::fibers::mutex m_shuttingDown_mtx{};
73 std::vector<std::jthread> m_threads{};
74 std::vector<SchedAlgo*> m_schedAlgoList{};
75};
boost::fibers::condition_variable m_shuttingDown_cv
boost::fibers::algo::shared_work SchedAlgo
void schedule(F &&func)
Schedule work to run on the asynchronous pool.
std::vector< SchedAlgo * > m_schedAlgoList
boost::fibers::mutex m_shuttingDown_mtx
std::vector< std::jthread > m_threads
FiberManager(int n_threads)
FiberManager constructor.