单生产者 单消费者

来源:互联网 发布:人脸识别算法 开源 编辑:程序博客网 时间:2024/03/29 23:02
#include <stdio.h>#include <pthread.h>struct event_loop_buf{int head,tail;//@range 0~49 int eventnum[50];};volatile struct event_loop_buf evlop[6];init_evlop(){int i,j;for(i=0; i<6; i++){evlop[i].head = 0;evlop[i].tail = 0;for(j=0;j<50;j++){evlop[i].eventnum[j] = -1;}}}int get_a_event(int line){int ret = 0;//head is the first valid data int head_next = evlop[line].head+1 > 49 ? 0 : evlop[line].head+1;if(evlop[line].head != evlop[line].tail){if(evlop[line].eventnum[evlop[line].head] != -1){ret = evlop[line].eventnum[evlop[line].head];evlop[line].eventnum[evlop[line].head] = -1;}else{ret = -1;}evlop[line].head = head_next;}else{if(evlop[line].eventnum[evlop[line].head] != -1){//read head;//clear head;ret = evlop[line].eventnum[evlop[line].head];evlop[line].eventnum[evlop[line].head] = -1;}else{ret = -1;}}return ret;}int insert_a_event(int line,int in){//tail is last valid data int tail_next = evlop[line].tail+1 > 49 ? 0 : evlop[line].tail+1;if(tail_next != evlop[line].head){evlop[line].eventnum[tail_next] = in;evlop[line].tail = tail_next;}else{return -1;}return 1;}void getev(){int ret,count=0;while(1){while(-1 == (ret = get_a_event(1)));printf("                   get %d ret is %d\n",++count,ret);//sleep(1);}}int main(){int n,count=0,ret;pthread_create(&n,NULL,getev,NULL);init_evlop();        int i = 400;while(i-- > 0){while(-1 == (ret = insert_a_event(1,22+count)));printf(" %d insertret %d is %d\n",++count,22+count,ret);//sleep(3);}    while(1)sleep(5);}


0 0
原创粉丝点击