四、连接池的实现
每个连接池保存一个链表保存已经建立的连接:list<MyConnection *> * m_connections
当然这个链表也需要锁来进行多线程保护:pthread_mutex_t m_connectionMutex;
此处一个MyConnection也是一个MyTask,由一个线程来负责。
线程池也作为连接池的成员变量:MyThreadPool * m_threadPool
连接池由类MyConnectionPool负责,其主要函数如下:
void MyConnectionPool::addConnection(MyConnection * pConn)
{
pthread_mutex_lock(&m_connectionMutex);
m_connections->push_back(pConn);
pthread_mutex_unlock(&m_connectionMutex);
m_threadPool->addTask(pConn);
}
MyConnectionPool也要启动一个背后的线程,来管理这些连接,移除结束的连接和错误的连接。
void MyConnectionPool::managePool()
{
pthread_mutex_lock(&m_connectionMutex);
for (list<MyConnection *>::iterator itr = m_connections->begin(); itr!=m_connections->end(); )
{
MyConnection *conn = *itr;
if (conn->isFinish())
{
delete conn;
conn = NULL;
list<MyConnection *>::iterator pos = itr++;
m_connections->erase(pos);
}
else if (conn->isError())
{
//处理错误的连接
++itr;
}
else
{
++itr;
}
}
pthread_mutex_unlock(&m_connectionMutex);
}
本文导航
- 第1页: 首页
- 第2页: 对Socket的封装
- 第3页: 线程池的实现
- 第4页: 连接池的实现
- 第5页: 监听线程的实现