找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5166|回复: 0

ACE_Allocator_Adapter内存池释放的问题

[复制链接]
发表于 2012-7-5 07:16:29 | 显示全部楼层 |阅读模式
本帖最后由 独来读网 于 2012-7-5 14:37 编辑

我看了<ACE自适配通信环境中文技术文档>也看了
freeeyes  ACE_Message_Block使用研究, 还是没搞明白这个内存池如何正确释放.
freeeyes ACE_Message_Block使用研究中说到,关于ACE进程级内存池类型的应用,这里是一个新的话题,等有时间专门开个帖子讨论。
什么时候能开这个话题?
modern,你好,这次我看了相关资料,代码也断点进去了,看到removeall中调用了
  if (this->delete_lock_)
    this->lock_->remove ();
即这个锁没有了,所以我再次用到这个内存池时,就出现了锁的问题.好像没有函数只进行
  // Give the memory pool a chance to release its resources.
  int const result = this->memory_pool_.release ();的操作.


typedef  ACE_Malloc<ACE_LOCAL_MEMORY_POOL, ACE_SYNCH_MUTEX> MUTEX_MALLOC;
typedef ACE_Allocator_Adapter<MUTEX_MALLOC> Mutex_Allocator;
Mutex_Allocator g_msg_service_mb_allocator;   //内存池分配器定义
//在内存池中分配一新的ACE_Message_Block* mb
    ACE_Message_Block* mb = NULL;
    ACE_NEW_MALLOC_NORETURN(mb,
        static_cast<ACE_Message_Block*>( g_msg_service_mb_allocator.malloc(sizeof(ACE_Message_Block))),
        ACE_Message_Block(sizeof(_MessageBase*), // size
        ACE_Message_Block::MB_DATA, // type
        0,
        0,
        &g_msg_service_mb_allocator, // allocator_strategy
        0, // locking strategy
        ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY, // priority
        ACE_Time_Value::zero,
        ACE_Time_Value::max_time,
        &g_msg_service_mb_allocator,
        &g_msg_service_mb_allocator
        ));

使用内存分配器分配内存,我的理解是g_msg_service_mb_allocator内部有n个空闲的ACE_Message_Block和已使用的ACE_Message_Block.
当我采用这个分配时,会拿出一个空闲的出来给用户,使用完了,会新建一个出来.
我就想在不用这个分配器的时候,将分配池清理一下,即调用g_msg_service_mb_allocator.remove().但我再次使用时,出现错误,错误出现在ACE_NEW_MALLOC_NORETURN这个执行体里面,具体错误被断点在了线程锁上,忘高手帮我一下.

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 17:33 , Processed in 0.012673 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表