多线程内存池基本框架(C++)

释放双眼,带上耳机,听听看~!

为了使多个线程并发地分配和释放内存,必须在分配器方法中添加互斥锁,下面是一种多线程内存池实现的基本框架:


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++性能的编程技术》

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ 高性能服务器网络框架设计细节

2022-1-11 12:36:11

安全运维

系统稳定性保障 – 1-3-5-10的应急响应中心专业治理宕机

2024-12-21 17:15:56

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索