GNU Radio Manual and C++ API Reference  3.10.9.1
The Free & Open Software Radio Ecosystem
thread_group.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright (C) 2001-2003 William E. Kempf
4  * Copyright (C) 2007 Anthony Williams
5  * Copyright 2008,2009 Free Software Foundation, Inc.
6  * Copyright 2023 Marcus Müller
7  *
8  * Distributed under the Boost Software License, Version 1.0. (See accompanying
9  * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
10  */
11 
12 /*
13  * This was extracted from Boost 1.35.0 and fixed.
14  */
15 
16 #ifndef INCLUDED_THREAD_GROUP_H
17 #define INCLUDED_THREAD_GROUP_H
18 
19 #include <gnuradio/api.h>
20 #include <gnuradio/thread/thread.h>
21 
22 #include <shared_mutex>
23 #include <unordered_set>
24 #include <functional>
25 #include <memory>
26 
27 namespace gr {
28 namespace thread {
29 
31 {
32 public:
33  thread_group() = default;
34  ~thread_group() = default;
35  thread_group(const thread_group&) = delete;
36  thread_group& operator=(const thread_group&) = delete;
37 
38  boost::thread* create_thread(const std::function<void()>& threadfunc);
39  void add_thread(std::unique_ptr<boost::thread> thrd) noexcept;
40  void remove_thread(boost::thread* thrd) noexcept;
41  void join_all();
42  void interrupt_all();
43  size_t size() const noexcept;
44 
45 private:
46  std::unordered_set<std::unique_ptr<boost::thread>> m_threads;
47  mutable std::shared_mutex m_mutex;
48 };
49 
50 } /* namespace thread */
51 } /* namespace gr */
52 
53 #endif /* INCLUDED_THREAD_GROUP_H */
Definition: thread_group.h:31
void add_thread(std::unique_ptr< boost::thread > thrd) noexcept
thread_group(const thread_group &)=delete
void remove_thread(boost::thread *thrd) noexcept
thread_group & operator=(const thread_group &)=delete
size_t size() const noexcept
boost::thread * create_thread(const std::function< void()> &threadfunc)
#define GR_RUNTIME_API
Definition: gnuradio-runtime/include/gnuradio/api.h:18
boost::thread thread
Definition: thread.h:36
GNU Radio logging wrapper.
Definition: basic_block.h:29