生产者消费者模型,循环队列实现
来源:互联网 发布:xyz域名怎么样 编辑:程序博客网 时间:2024/06/05 11:43
说明:
1. 其中涉及互斥量和信号量的部分注释掉了, 加上就是多线程版本。
2. 消息数量超出循环队列长度时会被丢弃,如果不丢弃,需要使用信号量做等待操作。
3. 该队列可能存在一个数值溢出问题,即处理的消息数量超出整形值的问题。
#define QUEUE_LEN 1024typedef struct ObjectListCell{intsize;void*value;} ObjectListCell;typedef struct ObjectList{ObjectListCell *queue;int head;int tail;int len;int mask;//pthread_mutex_t mutex;//SemaphoreData sema;} ObjectList;ObjectList*object_list_create(){ObjectList * list = (ObjectList*)malloc(sizeof(ObjectList) + QUEUE_LEN * sizeof(ObjectListCell));list->head = list->tail =0;list->len = QUEUE_LEN;list->mask = QUEUE_LEN - 1;list->queue = (ObjectListCell*)((char*)list + sizeof(ObjectList));//InitMutex(&(list->mutex));//SemaphoreInit(&list->sema, 0);return list;}intobject_list_push(ObjectList* list, void * object, int size){void *value;if(object == NULL )return 0;//LockMutex(&list->mutex);if(list->tail - list->head < list->len){value = malloc(size);memcpy(value, object, size);list->queue[list->tail & list->mask].size = size;list->queue[list->tail & list->mask].value = value;list->tail ++;//LSemaphorePost(&list->sema);}//UnLockMutex(&list->mutex);return 1;}intobject_list_pop(ObjectList* list, void * object, int *size){if(object == NULL )return 0;//LockMutex(&list->mutex);if(list->tail == list->head){list->tail = list->head = 0;}//UnLockMutex(&list->mutex);//LSemaphoreWait(&list->sema, true);//LockMutex(&list->mutex);memcpy(object, list->queue[list->head & list->mask].value, list->queue[list->head & list->mask].size);if(size)*size = list->queue[list->head & list->mask].size;free(list->queue[list->head & list->mask].value);list->queue[list->head & list->mask].value = NULL;list->queue[list->head & list->mask].size = 0;list->head++;//UnLockMutex(&list->mutex);return 1;}voidobject_list_free(ObjectList *list){while (list->head > list->tail){free(list->queue[list->head++].value);}free(list);}
0 0
- 生产者消费者模型,循环队列实现
- 队列实现生产者消费者模型
- 通过阻塞队列实现生产者消费者模型
- 线程池 队列生产者消费者模型实现
- 生产者-消费者模型实现
- 用生产者消费者模型实现的线程安全环形队列
- linux c语言实现队列及用于生产者消费者模型
- 微软100题(34)生产者消费者模型实现队列
- wait,notify,非阻塞队列实现生产者,消费者模型
- 多进程 队列 实现生产者消费者模型 python 笔记
- 生产者消费者JAVA队列实现
- 实现一个生产者消费者队列
- 阻塞队列实现生产者消费者
- 简单实现生产者、消费者模型
- java实现生产者消费者模型
- 生产者消费者模型的实现
- LinkedBlockingQueue 实现生产者消费者模型
- OpenMP实现生产者消费者模型
- LeetCode Unique Paths II
- Transtable Tablespace 练习
- Android中的触屏事件
- 500 OOPS:cannot change directory:/home/***
- 谷歌浏览器快捷键大全
- 生产者消费者模型,循环队列实现
- 国家code和区号计算
- 标准模板库
- 搭建Jenkins持续集成平台
- 中声明变量的范围
- java(2014/7/14)
- java命名规则以及java概述
- servlet编码问题
- maria项目环境配置