- 论坛徽章:
- 0
|
本帖最后由 iCoding 于 2010-08-14 11:07 编辑
- typedef struct apr_socket_queue
- {
- int size;
- int *base;
- volatile int writer;
- volatile int reader;
- }apr_socket_queue;
- #include "datatype.h"
- #include <stdlib.h>
- #define HEAD 0
- #define TRUE 1
- #define FALSE 0
- void create_queue(apr_socket_queue *queue,apr_config *pconfig)
- {
- queue->size = pconfig->socket_number;
- queue->base = (int*)malloc(sizeof(int)*pconfig->socket_number);
- queue->writer = HEAD;
- queue->reader = HEAD - 1;
- }
- int enqueue(apr_socket_queue *queue,int socket)
- {
- if(queue->writer+1 != queue->reader && queue->writer < queue->size-1)
- {
- queue->base[queue->writer] = socket;
- queue->writer++;
- return TRUE;
- }
- if(queue->writer == queue->size-1 && queue->reader > HEAD)
- {
- queue->base[queue->writer] = socket;
- queue->writer = HEAD;
- return TRUE;
- }
- return FALSE;//the queue is full
- }
- int dequeue(apr_socket_queue *queue,int *socket)
- {
- if(queue->reader+1 != queue->writer && queue->reader < queue->size-1)
- {
- queue->reader++;
- *socket = queue->base[queue->reader];
- return TRUE;
- }
- if(queue->reader == queue->size-1 && queue->writer > HEAD)
- {
- queue->reader = HEAD;
- *socket = queue->base[queue->reader];
- return TRUE;
- }
- return FALSE;// the queue is empty
- }
- void destroy_queue(apr_socket_queue *queue)
- {
- free(queue->base);
- queue->writer = HEAD;
- queue->reader = HEAD -1;
- queue->size = 0;
- }
复制代码 |
|