概述
用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;
}