C语言-简单的缓冲池(Buffer Pool)的源码示例

概述

用C语言实现,缓冲池用于管理一组固定大小的缓冲区,并提供分配和释放缓冲区的功能。

cpp 复制代码
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>

#define BUFFER_SIZE 64
#define POOL_SIZE   10

// 定义缓冲区结构体
typedef struct {
    uint8_t data[BUFFER_SIZE];
    bool inUse;
} Buffer;

// 定义缓冲池结构体
typedef struct {
    Buffer buffers[POOL_SIZE];
} BufferPool;

// 初始化缓冲池
void initBufferPool(BufferPool* pool) 
{
    for (int i = 0; i < POOL_SIZE; ++i) {
        pool->buffers[i].inUse = false;
    }
}

// 分配缓冲区
uint8_t* allocateBuffer(BufferPool* pool) 
{
    for (int i = 0; i < POOL_SIZE; ++i) {
        if (!pool->buffers[i].inUse) {
            pool->buffers[i].inUse = true;
            return pool->buffers[i].data;
        }
    }
    // 没有可用的缓冲区
    return NULL;
}

// 释放缓冲区
void freeBuffer(BufferPool* pool, uint8_t* buffer) 
{
    for (int i = 0; i < POOL_SIZE; ++i) {
        if (pool->buffers[i].data == buffer) {
            pool->buffers[i].inUse = false;
            return;
        }
    }
    // 找不到对应的缓冲区
    printf("Failed to free buffer: Buffer not found\n");
}

int main(void)
{
    BufferPool pool;
    initBufferPool(&pool);

    // 分配缓冲区
    uint8_t* buffer1 = allocateBuffer(&pool);
    if (buffer1 != NULL) {
        // 使用缓冲区
        // ...
        // 释放缓冲区
        freeBuffer(&pool, buffer1);
    }

    // 分配另一个缓冲区
    uint8_t* buffer2 = allocateBuffer(&pool);
    if (buffer2 != NULL) {
        // 使用缓冲区
        // ...
        // 释放缓冲区
        freeBuffer(&pool, buffer2);
    }

    return 0;
}
相关推荐
玲娜贝儿--努力学习买大鸡腿版11 分钟前
hot 100 刷题记录(1)
数据结构·python·算法
123过去35 分钟前
pixiewps使用教程
linux·网络·测试工具·算法·哈希算法
深圳市快瞳科技有限公司41 分钟前
低空经济下,鸟类识别算法与无人机硬件的兼容性优化策略
算法·无人机
努力中的编程者1 小时前
二叉树(C语言底层实现)
c语言·开发语言·数据结构·c++·算法
鹤旗1 小时前
While语句,do-while语句,for语句
java·jvm·算法
qq_416018721 小时前
高性能密码学库
开发语言·c++·算法
NAGNIP1 小时前
一文搞懂卷积神经网络经典架构-LeNet
算法·面试
宵时待雨1 小时前
C++笔记归纳14:AVL树
开发语言·数据结构·c++·笔记·算法
NAGNIP1 小时前
一文搞懂深度学习中的池化!
算法·面试
爱编码的小八嘎2 小时前
C语言完美演绎5-3
c语言