blob: 29b64437cdb7a479596bb968dba442f72c8c7bd2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
// $Id$
#ifndef MPOOL_H
#define MPOOL_H
// Everything else we need is in this one header
#include "ace/Malloc.h"
/*
With this we will abstract away some of the details of the memory
pool. Note that we don't treat this as a singleton because an
application may need more than one pool. Each would have a
different name and be used for different purposes.
*/
class Allocator
{
public:
// The pool name will be used to create a unique semaphore to
// keep this pool separate from others.
Allocator( const char * _name = "MemoryPool" );
~Allocator(void);
typedef ACE_Malloc<ACE_MMAP_Memory_Pool, ACE_SV_Semaphore_Simple> pool_t;
// Provide an accessor to the pool. This will also allocate the
// pool when first invoked.
pool_t & pool(void);
protected:
// The name we gave to the pool
char * name_;
pool_t * pool_;
};
/*
The client and server need to agree on a certain set of values. By
placing them in the Constants class we can eliminate a bit of confusion.
*/
class Constants
{
public:
// The semaphore keys are needed for the two semaphores that
// synch access to the shared memory area.
static const int SEM_KEY_1;
static const int SEM_KEY_2;
// How big the pool will be and what we'll put into it. A real
// app wouldn't need SHMDATA of course.
static const int SHMSZ;
static const char * SHMDATA;
// The name assigned to the memory pool by the server is needed
// by the client. Without it, the pool cannot be found.
// Likewise, the name the server will bind() to the region of the
// pool must be available to the client.
static const char * PoolName;
static const char * RegionName;
};
#endif
|