c语言实现队列 Linux

作者: admin 日期: 2017-11-21 09:33:56 人气: - 评论: 0
#include <iostream>
#include <pthread.h>
int report_msg_queue_length;
pthread_mutex_t report_msg_queue_mutex;
struct report_msg_queue_node{
report_msg_queue_node* prev;
   report_msg_queue_node* next;
   char * data;
};
report_msg_queue_node * report_msg_queue_start;
report_msg_queue_node * report_msg_queue_end;
void report_msg_queue_init(){
pthread_mutex_init(&report_msg_queue_mutex,NULL);
   report_msg_queue_length=0;
   report_msg_queue_start=(struct report_msg_queue_node *)malloc(sizeof(struct report_msg_queue_node));
   report_msg_queue_start->prev=NULL;
   report_msg_queue_start->next=NULL;
   report_msg_queue_end=report_msg_queue_start;
}

void report_msg_queue_push(char * msg){
pthread_mutex_lock(&report_msg_queue_mutex);
   if(report_msg_queue_start->data==NULL){
report_msg_queue_start->data=msg;
       pthread_mutex_unlock(&report_msg_queue_mutex);
   }else{
report_msg_queue_node* report_msg_queue_temp = (struct report_msg_queue_node *)malloc(sizeof(struct report_msg_queue_node));
       report_msg_queue_temp->prev=NULL;
       report_msg_queue_temp->next=report_msg_queue_start;
       report_msg_queue_temp->data=msg;
       report_msg_queue_start->prev=report_msg_queue_temp;
       report_msg_queue_start = report_msg_queue_temp;
       pthread_mutex_unlock(&report_msg_queue_mutex);
   }
}

char * report_msg_queue_pop(){
pthread_mutex_lock(&report_msg_queue_mutex);
   if(report_msg_queue_end->data==NULL){
pthread_mutex_unlock(&report_msg_queue_mutex);
       return NULL;
   }else{
char * ret = report_msg_queue_end->data;
       if(report_msg_queue_end->prev!=NULL){
report_msg_queue_node * temp = report_msg_queue_end;
           report_msg_queue_end= report_msg_queue_end->prev;
           free(temp);
       }else{
report_msg_queue_end->data=NULL;
       }
pthread_mutex_unlock(&report_msg_queue_mutex);
       return  ret;
   }
}

int main() {

report_msg_queue_init();

   for (int i = 0; i <100 ; ++i) {
report_msg_queue_push("1");
       report_msg_queue_push("2");
       report_msg_queue_push("3");
       report_msg_queue_push("4");
       char * ch;
       while (ch = report_msg_queue_pop()){
printf("%s\n",ch);
       }
}


return 0;
}


相关内容

发表评论
更多 网友评论0 条评论)
暂无评论

Copyright © 2012-2014 我的代码板 Inc. 保留所有权利。

页面耗时0.0234秒, 内存占用1.82 MB, 访问数据库12次

闽ICP备15009223号-1