GNU Radio Manual and C++ API Reference  3.8.1.0
The Free & Open Software Radio Ecosystem
pmt_pool.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2007,2009,2013 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * GNU Radio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3, or (at your option)
10  * any later version.
11  *
12  * GNU Radio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21 #ifndef INCLUDED_PMT_POOL_H
22 #define INCLUDED_PMT_POOL_H
23 
24 #include <pmt/api.h>
25 #include <boost/thread.hpp>
26 #include <cstddef>
27 #include <vector>
28 
29 namespace pmt {
30 
31 /*!
32  * \brief very simple thread-safe fixed-size allocation pool
33  *
34  * FIXME may want to go to global allocation with per-thread free list.
35  * This would eliminate virtually all lock contention.
36  */
38 {
39 
40  struct PMT_API item {
41  struct item* d_next;
42  };
43 
44  typedef boost::unique_lock<boost::mutex> scoped_lock;
45  mutable boost::mutex d_mutex;
47 
48  size_t d_itemsize;
49  size_t d_alignment;
50  size_t d_allocation_size;
51  size_t d_max_items;
52  size_t d_n_items;
53  item* d_freelist;
54  std::vector<char*> d_allocations;
55 
56 public:
57  /*!
58  * \param itemsize size in bytes of the items to be allocated.
59  * \param alignment alignment in bytes of all objects to be allocated (must be
60  *power-of-2). \param allocation_size number of bytes to allocate at a time from the
61  *underlying allocator. \param max_items is the maximum number of items to allocate.
62  *If this number is exceeded, the allocate blocks. 0 implies no limit.
63  */
64  pmt_pool(size_t itemsize,
65  size_t alignment = 16,
66  size_t allocation_size = 4096,
67  size_t max_items = 0);
68  ~pmt_pool();
69 
70  void* malloc();
71  void free(void* p);
72 };
73 
74 } /* namespace pmt */
75 
76 #endif /* INCLUDED_PMT_POOL_H */
boost::unique_lock< boost::mutex > scoped_lock
Definition: thread.h:49
FFT_API void free(void *b)
Helper function for freeing fft buffers.
#define PMT_API
Definition: gnuradio-runtime/include/pmt/api.h:30
boost::mutex mutex
Definition: thread.h:48
very simple thread-safe fixed-size allocation pool
Definition: pmt_pool.h:37
Definition: pmt.h:51
BLOCKS_API size_t itemsize(vector_type type)
boost::condition_variable condition_variable
Definition: thread.h:50