C实现简单的资源池,确保所得资源空闲时间最长

本文介绍了一种C语言实现的简单资源池管理方法,确保分配的资源是最长时间未使用的。通过obtain_resource获取资源,使用后用release_resource归还。资源池初始化允许设置资源初始状态。虽然链表也能实现类似功能,但相比数组操作,链表涉及更多内存管理和复杂代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define INVALID_RESOUCE 0xFFFFFFFF
struct resouce_manager
{
    int pool_size;
    int pool_head;
    int resouce_left;


    int resouce_pool[1]; /* resouce_pool[0] 's value means invalid */
};


struct resouce_manager * get_resouce_manager(int size)
{
    int i;
    struct resouce_manager * manager = malloc(sizeof(struct resouce_manager) + size * sizeof(int));
    if (manager == NULL)
        return NULL;


    manager->pool_size = size;
    manager->pool_head = 1;
    manager->resouce_left = size;
    manager->resouce_pool[0] = INVALID_RESOUCE;


    for (i = 1; i <= size; ++i)
    {
        manager->resouce_pool[i] = i;
    }


    return manager;
}


void release_resouce_manager(struct resouce_manager * manager)
{
    if (manager)
        free(manager);
}


int obtain_resouce(struct resouce_manager * manager)
{
    int resouce;
    if (manager->resouce_left)
    {
        manager->resouce_left--;
        resouce = manager->resouce_pool[manager->pool_head];
        manager->pool_head++;
        if (manager->pool_head > manager->pool_size)
            manager->pool_head -= manager->pool_size;
    }
    else
    {
        resouce = manager->resouce_pool[0];
    }


    return resouce;
}


void release_resouce(struct resouce_manager * manager, int resouce)
{
    int pool_tail;
    if (manager->resouce_left == manager->pool_size)
        return;
    pool_tail = manager->pool_head + manager->resouce_left;
    if (pool_tail > manager->pool_size)
        pool_tail -= manager->pool_size;


    manager->resouce_left++;
    manager->resouce_pool[pool_tail] = resouce;
}


以上代码实现了一个简单的资源池管理,是的通过obtain_resouce获得的资源是资源管理池中空闲事件最长的。当该资源不用的时候,通过release_resouce释放资源到相应的资源池中

可对资源管理池的初始化函数进行调整,将资源的初始化位置设定。几个实现轮询。

当然通过链表组成队列也可以简单的实现该功能。但是链表操作相对与数组操作比较负责,需要管理大量的节点,并且涉及到大量的内存申请与释放。比较负责,代码量也比较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值