首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

boost object_pool 的constuct后,destroy能阻塞吗?赠送100分

2012-09-10 
boost object_pool 的constuct后,destroy会阻塞吗?赠送100分http://topic.csdn.net/u/20120511/21/693d184

boost object_pool 的constuct后,destroy会阻塞吗?赠送100分
http://topic.csdn.net/u/20120511/21/693d184f-a63a-4bdd-b590-3cb583baa22b.html
这个帖子没人回,100分,可以追加,谢谢哈。

typedef boost::shared_ptr< Session > Session_ptr;
Session_ptr new_session( m_session_pool.construct(m_io_service), bind(&Session_pool::destroy,&m_session_pool,_1));//为智能指针析构指定方法destroy

destroy(Session * p)
{
  加锁(构造加锁、析构解锁)
  m_session_pool.destroy(p);
}

我开辟了N个线程,比如N=9,有一个客户连接,我就new一个,通过智能指针+对象池。
然后我模拟一个高并发连接,每秒几千个客户连接,刚开始都正常,可是执行一会,CPU就百分之百了,也不在接受新数据了。

后来加了打印,发现第一个线程进入destroy(Session * p),获得锁,然后执行 m_session_pool.destroy(p);缺阻塞了,也就是 m_session_pool.destroy(p);后面的打印信息没打印,然后紧接着后面8个线程都进入destroy(Session * p),但是被锁阻塞了,这就导致了卡住了,请问 m_session_pool.destroy(p);什么情况会导致失败?

我把destroy(Session * p)内部的代码全部注释,也就是让他内存泄露,但是不会出现卡主的情况。

[解决办法]

探讨

跟踪了下源码,object——pool 不是线程安全

引用:
要是我发这么个帖子,你能答出来?

热点排行