1.demo2.c
主要解决内存满了问题和读写速度不一致问题即读的比写的快。
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include "demo2.h"
#define MAX_BUFFER_NUM 5
#define MAX_DATA_LENGTH 1024
/* 设置句柄类 */
typedef struct {
char abyBuf[MAX_DATA_LENGTH]; /* 存放的数据量 */
int nBufferldx;
int nBufferEnable; /* buffer是否被占用 */
int nWriteBufferLength; /* buffer内写入的数据量此buffer最多可以
写入2的32次方减一的数据 */
int nReadBufferLength;/* buffer内读出的数据 */
int bWait; /* 条件等待标志位 */
pthread_mutex_t tBufferMutex; /* buffer访问时线程锁 */
pthread_cond_t tBufferReadCond; /* 条件变量 */
}TBufferlnf;
static TBufferlnf g_tBufferInf[MAX_BUFFER_NUM];/* 缓冲池的最大数量为结构体数组 */
/* 1. 创建buffer
* 2. 销毁buffer
* 3. 往buffer送数据
* 4. 往buffer取数据
* 5. 获取buffer状态
*
*/
/* 主要解决问题 */
/* 1.读的比写的快怎么办,Buffer满了怎么办 */
/* 显示当前Buffer的状态 */
void show_Buffer_Inf(void **pptHandle)
{
TBufferlnf *ptHandle = (TBufferlnf *)*pptHandle;
printf("nIdx=%d\n", ptHandle->nBufferldx);
printf("nEnable=%d\n", ptHandle->nBufferEnable);
printf("data nReadBufferLength=%d\n", ptHandle->nReadBufferLength);
printf("data nWriteBufferLength=%d\n", ptHandle->nWriteBufferLength);
}
int get_Data_From_Buffer(void **pptHandle, void *data,
int nDataLength) /* data为主函数将要拷贝到的内存块 */
{
TBufferlnf *ptHandle = (TBufferlnf *)*pptHandle;
int nReadLength;
int nNowDataLocation;//确定buffer的元素位置
int nDiff;
if ((pptHandle == NULL) || (data == NULL))
{
printf("input param error, ptHandle=%p, data=%p\n", ptHandle, data);
return -1;
}
if (nDataLength >= MAX_DATA_LENGTH) /* 如果获得的数据大于等于可以存放的数据量 */
{
printf("input param error, nDataLength=%d", nDataLength);
return -2;
}
pthread_mutex_lock(&(ptHandle->tBufferMutex)); /* 读的数据一定要比写的慢 */
nDiff