生产者消费者算法
来源:互联网 发布:linux man手册中文版 编辑:程序博客网 时间:2024/05/17 08:29
#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <pthread.h>#include <semaphore.h>#define PRODUCER 5#define CONSUMER 5#define BUFFER 10sem_t empty,full;pthread_mutex_t mutex;int buffer[BUFFER];int producer_id=0,consumer_id=0;int index_in,index_out;void print(){ printf("Buffer:\n"); for(int i=0;i<BUFFER;i++) { printf("___"); } printf("\n"); for(int i=0;i<BUFFER;i++) { printf("|%d|",buffer[i]); } printf("\n"); for(int i=0;i<BUFFER;i++) { printf("———"); } printf("\n"); sleep(3);}void *Producer(){ int id=++producer_id; while(1) { sem_wait(&empty); pthread_mutex_lock(&mutex); index_in=index_in%BUFFER; printf("producer %d in %d.\n",id,index_in); buffer[index_in]=1; print(); index_in++; pthread_mutex_unlock(&mutex); sem_post(&full); }}void *Consumer(){ int id=++consumer_id; while(1) { sem_wait(&full); pthread_mutex_lock(&mutex); index_out=index_out%BUFFER; printf("consumer %d in %d.\n",id,index_out); buffer[index_out]=0; print(); index_out++; pthread_mutex_unlock(&mutex); sem_post(&empty); }}int main(){ int thread[15]; pthread_t producer[PRODUCER]; pthread_t consumer[CONSUMER]; int inite1=sem_init(&empty,0,BUFFER); int inite2=sem_init(&full,0,0); int inite3=pthread_mutex_init(&mutex,NULL); if(inite1&&inite2) { printf("sem initlialize failed \n"); exit(1); } if(inite3) { printf("mutex initlialize failed \n"); exit(1); } for(int i=0;i<PRODUCER;i++) { thread[i]=pthread_create(&producer[i],NULL,Producer,NULL); if(thread[i]!=0) { printf("producer %d fail to create \n",i); exit(0); } } for(int i=0;i<CONSUMER;i++) { thread[i]=pthread_create(&consumer[i],NULL,Consumer,NULL); if(thread[i]!=0) { printf("consumer %d fail to create \n",i); exit(1); } } for(int i=0;i<PRODUCER;i++) { pthread_join(producer[i],NULL); } for(int i=0;i<CONSUMER;i++) { pthread_join(consumer[i],NULL); } return 0;}
1 0
- 生产者消费者算法
- 生产者消费者算法
- 生产者消费者模式之工作窃取算法
- 生产者/消费者
- 生产者/消费者
- 生产者消费者
- 生产者-消费者
- 生产者消费者
- 生产者 消费者
- 生产者-消费者
- 生产者 消费者
- 生产者、消费者
- 生产者/消费者
- 生产者消费者
- 生产者/消费者
- 生产者消费者
- 生产者消费者
- 生产者消费者
- Servlet之转发与包含
- 常见对象_System类中的arraycopy()的讲解
- android-Ultra-Pull-To-Refresh 源码解析 收藏 项目:android-Ultra-Pull-To-Refresh
- Python_Day_1
- 单词计数(Map Reduce)-lintcode
- 生产者消费者算法
- C# 串口通讯摘要(转)
- leetcode-283. Move Zeroes
- AngularJS入门知识
- Windows2003 netca卡住
- 写一个二维数组排序算法
- jvm内存相关的知识总结
- android程序如何调用支付宝接口
- Linux下51单片机的led点亮