释放双眼,带上耳机,听听看~!
为了使多个线程并发地分配和释放内存,必须在分配器方法中添加互斥锁,下面是一种多线程内存池实现的基本框架:
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
64
65
66
67
68 1template <class POOLTYE, class LOCK>
2class MTMemoryPool
3{
4public:
5 inline void* alloc(size_t size);
6 inline void free(void* someElement);
7
8private:
9 POOLTYE stPool; //单线程内存池
10 LOCK theLock;
11};
12
13template <class M, class L>
14inline
15void* MTMemoryPool<M, L>::alloc(size_t size)
16{
17 void* mem;
18 theLock.lock(0);
19 mem = stPool.alloc(size);
20 theLock.unlock();
21
22 return mem;
23}
24
25
26template <class M, class L>
27inline
28void MTMemoryPool<M, L>::free(void* doomed)
29{
30 theLock.lock();
31 stPool.free(doomed);
32 theLock.unlock();
33}
34
35/*
36其中,MTMemoryPool类私有成员变量中的内存池可以采用单线程内存池,详见:
37//http://blog.csdn.net/y396397735/article/details/51820849
38
39锁类型定义如下
40*/
41//基类锁
42class BaseLock
43{
44public:
45 virtual ~BaseLock(){}
46 virtual void lock() = 0;
47 virtual void unlock() = 0;
48};
49
50//互斥锁
51class MutexLock : public BaseLock
52{
53public:
54 MutexLock(){ pthread_mutex_init(&lock, NULL); }
55 ~MutexLock(){ pthread_mutex_destory(&lock); }
56 inline void lock(){
57 pthread_mutex_lock();
58 }
59 inline void unlock(){
60 pthread_mutex_unlock();
61 }
62
63private:
64 pthread_mutex_t lock();
65};
66
67
68
《提高C++性能的编程技术》