生产者消费者模式in C
来源:互联网 发布:螺旋楼梯计算软件 编辑:程序博客网 时间:2024/06/07 22:52
#include<stdio.h>#include<pthread.h>#include<semaphore.h>#define bufsize 10#define produce_num 3#define consume_num 3int buffer[bufsize];int product_id=0;sem_t unused;sem_t used;pthread_mutex_t mutex;pthread_t g_thread[produce_num+consume_num];int in=0;int out=0;void *consume(void *param){ int i; while(1) { sem_wait(&used); pthread_mutex_lock(&mutex); for(i=0;i<bufsize;i++) { printf("%d\t",i); if(buffer[i]==-1) { printf("null\t"); } else { printf("%d\t",buffer[i]); } if(out==i) { printf("<- consume"); } printf("\n"); } buffer[out]=-1; out=(out+1)%bufsize; pthread_mutex_unlock(&mutex); sem_post(&unused); sleep(1); } return NULL;}void *produce(void *param){ int i; while(1) { sem_wait(&unused); pthread_mutex_lock(&mutex); for(i=0;i<bufsize;i++) { printf("%d\t",i); if(buffer[i]==-1) { printf("null\t"); } else { printf("%d\t",buffer[i]); } if(in==i) { printf("<- produce"); } printf("\n"); } buffer[in]=product_id; in=(in+1)%bufsize; product_id++; pthread_mutex_unlock(&mutex); sem_post(&used); sleep(1); }}int main(){ int i; sem_init(&unused,0,bufsize); sem_init(&used,0,0); pthread_mutex_init(&mutex,NULL); for(i=0;i<bufsize;i++) { buffer[i]=-1; } for(i=0;i<consume_num;i++) pthread_create(&g_thread[i],0,consume,(void *)i); for(i=0;i<produce_num;i++) pthread_create(&g_thread[consume_num+i],0,produce,(void *)i); for(i=0;i<consume_num+produce_num;i++) pthread_join(g_thread[i],NULL); sem_destroy(&unused); sem_destroy(&used); pthread_mutex_destroy(&mutex);}
阅读全文
0 0
- 生产者消费者模式in C
- 生产者—消费者模式
- 生产者-消费者模式
- 消费者与生产者模式
- 消费者与生产者模式
- 消费者与生产者模式
- 生产者消费者模式浅析
- 生产者消费者模式
- 生产者/消费者模式
- 生产者/消费者模式
- 生产者-消费者模式
- 【转】生产者消费者模式
- 生产者、消费者模式
- 生产者/消费者模式
- 生产者/消费者模式
- 生产者/消费者模式(转载)
- 生产者消费者模式浅析
- 生产者消费者模式浅析
- EditView密码的显示与隐藏
- 基于Spark的用户行为路径分析
- 统计大写字母个数
- mysql5.7无法启动问题
- 前台是https 443后台就不需要了
- 生产者消费者模式in C
- oracle 取当前日期时间的前一天前一小时前一分钟前一秒
- 经典算法面试题系列 (二)——three sum
- 使用git将本地项目放入git服务器远程仓库
- spring-data-redis接口调用出现乱码的问题
- springcloud使用consul作为配置中心
- 栈和队列
- JAVA多线程实现的两种方式
- 《从零开始搭建游戏服务器》 java与C#的protobuf序列化不兼容