Imported Upstream version 3.2.2
[debian/gnuradio] / gruel / src / include / gruel / thread_group.h
1 /* -*- c++ -*- */
2 /*
3  * Copyright (C) 2001-2003 William E. Kempf
4  * Copyright (C) 2007 Anthony Williams
5  * Copyright 2008 Free Software Foundation, Inc.
6  *
7  *  Distributed under the Boost Software License, Version 1.0. (See accompanying 
8  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9  */
10
11 /*
12  * This was extracted from Boost 1.35.0 and fixed.
13  */
14
15 #ifndef INCLUDED_GRUEL_THREAD_GROUP_H
16 #define INCLUDED_GRUEL_THREAD_GROUP_H
17
18 #include <boost/utility.hpp>
19 #include <boost/thread.hpp>
20 #include <boost/thread/shared_mutex.hpp>
21 #include <boost/function.hpp>
22
23 namespace gruel
24 {
25   class thread_group : public boost::noncopyable
26   {
27   public:
28     thread_group();
29     ~thread_group();
30
31     boost::thread* create_thread(const boost::function0<void>& threadfunc);
32     void add_thread(boost::thread* thrd);
33     void remove_thread(boost::thread* thrd);
34     void join_all();
35     void interrupt_all();
36     size_t size() const;
37
38   private:
39     std::list<boost::thread*> m_threads;
40     mutable boost::shared_mutex m_mutex;
41   };
42 }
43
44 #endif /* INCLUDED_GRUEL_THREAD_GROUP_H */