1、头文件定义
#include<mutex>
#include<list>
struct message {
char data[128];
int len;
};
class MessagePool {
public:
MessagePool();
virtual ~MessagePool();
//创建消息
message * obtain();
//回收消息
void recycle(message * msg);
private:
std::list<message *> mList;
std::mutex mMutex;
};
2、cpp实现
MessagePool::MessagePool() {
}
MessagePool::~MessagePool() {
}
message * MessagePool::obtain() {
std::unique_lock <std::mutex> lock(mMutex);
message* msg= nullptr;
if(mList.size() > 0){
msg= mList.front();
mList.pop_front();
}
else{
msg= new message ();
if(nullptr != msg){
memset(msg, 0, sizeof(msg));
}
}
return msg;
}
void MessagePool::recycle(message * msg){
std::unique_lock <std::mutex> lock(mMutex);
if(nullptr == msg){
return ;
}
memset(msg, 0, sizeof(msg));
mList.push_front(msg);
}