#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#include <unistd.h>
#include <iostream>using namespace std;const int ConsumerNum = 3;
const int PruducterNum = 2;const int M = 20;//缓存区大小int in = 0;
int out = 0;int buff[M] = {0};sem_t empty_sem;//表示空位的数量
sem_t full_sem;//产品的数量pthread_mutex_t mutex;//线程在读取或产生时,都应该加锁
int i=0;//产品Idvoid *product(void *)
{while (true){//sleep(1);sem_wait(&empty_sem);//空位数减1,已经把这个位置站住了,其他线程只能访问剩余位置pthread_mutex_lock(&mutex);cout<<"producter "<<pthread_self()<<" produce "<<i<<endl;buff[in] = i++;in = (in+1)%M;pthread_mutex_unlock(&mutex);sem_post(&full_sem);//产品数加1}
}void *consumer(void *)
{while(true){//sleep(1);sem_wait(&full_sem);pthread_mutex_lock(&mutex);cout<<"consumer "<<pthread_self()<<" consume "<<buff[out]<<endl;out = (out+1)%M;pthread_mutex_unlock(&mutex);sem_post(&empty_sem);}
}int main(void)
{pthread_t consumers[ConsumerNum];pthread_t producters[PruducterNum];sem_init(&empty_sem,0,M);//设初始值为Msem_init(&full_sem,0,0);//初始值为0pthread_mutex_init(&mutex,NULL);for (int ind=0;ind<ConsumerNum;++ind){pthread_create(&consumers[ind],NULL,consumer,(void *)NULL);}for (int ind=0;ind<PruducterNum;++ind){pthread_create(&producters[ind],NULL,product,(void *)NULL);}for(int ind =0;ind<ConsumerNum;++ind)pthread_join(consumers[ind],NULL);for(int ind = 0;ind <PruducterNum;++ind)pthread_join(producters[ind],NULL);exit(0);
}

多线程生产者和消费者相关推荐

  1. Java多线程-生产者与消费者

    Java多线程生产者与消费者,准确说应该是"生产者-消费者-仓储"模型,使用了仓储,使得生产者消费者模型就显得更有说服力. 对于此模型,应该明确一下几点: 1.生产者仅仅在仓储未满 ...

  2. java多线程生产者与消费者问题_Java多线程详解之四:生产者消费者问题

    一.问题描述 生产者消费者问题(Producer-Consumer problem),也称有限缓冲区问题(Bounded-buffer promblem),是一个多线程同步问题的经典案例.对于一个固定 ...

  3. java多线程生产者与消费者问题_java多线程实现生产者与消费者问题

    生产者与消费者多线程实现,首先的问题就是同步,就是关于临界资源的访问 我们首先来定义一个临界资源类,这里设为Q class Q { int z=4; } 这个int型的z就是我假设的临界资源的个数 然 ...

  4. java多线程生产者与消费者案例_多线程操作实例——生产者与消费者

    面对多线程学习生产者与消费者是最基本的实例 对于java后端开发的人员必须要掌握,还有考研考试计算机操作系统的同鞋. 下面是三个实例对于生产者与消费者的的例子,层层递进,逐步解决问题. 问题:生产者- ...

  5. Java基础进阶多线程-生产者和消费者模式

    1.什么是"生产者和消费者模式"? 生产线程负责生产,消费线程负责消费 生产线程和消费线程要达到均衡 这是一种特殊的业务需求,在这种特殊的情况下需要使用wait方法和notify方 ...

  6. 多线程——生产者与消费者(多)1.5新锁,问题解决

    package 多线程;import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; imp ...

  7. c++多线程生产者与消费者问题代码

    1.目录结构 2.代码 BufferPool.h #ifndef BUFFERPOOL #define BUFFERPOOL #include<windows.h> #include< ...

  8. C++多线程-生产者与消费者模型

    生产者-消费者是很有意思的一种算法.它的存在主要是两个目的,第一就是满足生产者对资源的不断创造:第二就是满足消费者对资源的不断索取.当然,因为空间是有限的,所以资源既不能无限存储,也不能无限索取. 生 ...

  9. 爬虫多线程生产者与消费者

    #-*-coding:utf-8-*- # -*-coding:utf-8-*- import threading, time, requests, json from queue import Qu ...

  10. Java 多线程-生产者、消费者

    一.整体代码 ThreadDemo.java public class ThreadDemo { public static void main(String[] args) { Godown god ...

最新文章

  1. PMCAFF微课堂 | 腾讯搜索专家教你如何用数据玩转APP运营
  2. jetbrains从入门到卸载 (前言) 为什么要jetbrains
  3. Linux dbm轻量级数据库介绍与使用
  4. wps vba宏插件_合并和拆分表格,告别VBA和插件,用WPS表格自带功能一键搞定,而且免费!...
  5. Android4.4深入浅出之SurfaceFlinger总体结构
  6. S9300 STP 配置规范
  7. 英特尔的指令集体系结构_英特尔下一代Tremont的Jasper Lake系产品面世
  8. 【趣文翻译】如何用各种编程语言杀死一条龙,PHP大亮 [转]
  9. M2M技术、标准与智慧城市顶层设计方法
  10. Coin3D三维可视化教程4
  11. python代码如何转java_将简单的Python代码转换为Java方法
  12. Matlab之取整函数
  13. 通用软件产品的漏洞数量排名
  14. 基于浏览器的m3u8和flv的播放器
  15. 数据库系统实验设计P63页例题及解析
  16. css-盒子模型border-box
  17. Linux iio驱动学习
  18. go down to用法
  19. Cache 的地址映像方式(4种)
  20. linux使用Quota配额之须配额目录为非独立文件系统并无可分配分区解决办法

热门文章

  1. 【大数据教程】HDFS基本架构、基本命令、回收站机制和API操作
  2. 自学机器学习、深度学习、人工智能的学习资源集合
  3. 不只是相关:基于真理共识论的社区问答可信答案选择新方法
  4. 修改Transformer结构,设计一个更快更好的MLM模型
  5. 实录 | 平安人寿资深算法工程师张智:人机交互场景下的知识挖掘
  6. Thymeleaf 语法快速入门
  7. HDU2091 空心三角形 水题
  8. python 框架和 spring mvc_Django和Spring MVC,该选择哪个框架进行Web开发学习?
  9. 【Linux环境部署】最新版 elasticsearch + kibana(7.15.0)安装、配置、启动(多个问题处理 + kibana仪表盘使用)
  10. 04 | 负载均衡:Ribbon 如何保证微服务的高可用