多线程中生产者消费者模型代码练习

C语言之生产者与消费者模型 多线程并发应用程序有一个经典的模型,即生产者/消费者模型。系统中,产生消息的是生产者,处理消息的是消费者,消费者和生产者通过一个缓冲区进行消息传递。生产者产生消息后提交到缓冲区,然后通知消费者可以从中取出消息进行处理。消费者处理完信息后,通知生产者可以继续提供消息。 要实现这个模型,关键在于消费者和生产者这两个线程进行同步。也就是说:只有缓冲区中有消息时,消费者才能够提取消息;只有消息已被处理, 阅读详情

        理解的还不是太透彻,先把代码照着敲下来,慢慢感悟吧。。。

package shi;
class Message {
	private String title;
	private String content;
	private boolean flag = true;
	//flag = true 表示可以生产,不能消费
	//flag = false 表示可以消费,不能生产
	public synchronized void set(String title, String content) {
		if(this.flag == false) { //已经生产过了,还没有消费,本能生产
			try {
				super.wait();  //Object类的方法,等待
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		this.title = title;
		try {
			Thread.sleep(200);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		this.content = content;
		this.flag = false;   //已经完成生产,修改标志位
		super.notify();  //唤醒等待线程
	}
	public synchronized void get() {
		if (this.flag == true) {   //还没有生产不能取走
			try {
				super.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(this.title+"--->"+this.content);
		this.flag = true;  //已经取走可以生产
		super.notify();
	}
}
class Producer implements Runnable { //定义生产者
	private Message msg = null;
	public Producer(Message msg) {
		this.msg = msg;
	}
	@Override
	public void run() {
		for(int i=9;i<50;i++) {
			if(i%2 == 0) {
				this.msg.set("史志斌", "河北经贸大学学生");
			}else {
				this.msg.set("河北经贸大学", "heuet.edu.cn");
			}
		} 
		
	}
	
}
class Consumer implements Runnable {
	private Message msg = null;
	public Consumer(Message msg) {
		this.msg = msg;
	} 
	@Override
	public void run() {
		for(int i=0;i<50;i++) {
			this.msg.get();
		}
	}
	
}
public class PcTest{

	public static void main(String[] args) {
		Message msg = new Message();
		new Thread(new Producer(msg)).start();
		new Thread(new Consumer(msg)).start();
	}

}

部分输出结果:

河北经贸大学--->heuet.edu.cn
史志斌--->河北经贸大学学生
河北经贸大学--->heuet.edu.cn
史志斌--->河北经贸大学学生
河北经贸大学--->heuet.edu.cn
史志斌--->河北经贸大学学生
河北经贸大学--->heuet.edu.cn

史志斌--->河北经贸大学学生



C++ 实现多线程:生产者消费者模型 C++ 实现多线程:生产者消费者模型 #include <iostream> #include <mutex> #include <thread> #ifdef _MSC_VER #include <windows.h> // windows #else #include <unistd.h> // linux #endif // ... 阅读详情

相关推荐

生产者和消费者模式多线程

使用多线程实现了生产者和消费者模式

Java线程同步:生产者-消费者 模型(代码示例)

public class ThreadSyn { public static void main(String[] args) { new ThreadSyn(); } public ThreadSyn() { Queue queue = new Queue(); Producter p = new Producter(queue); Consumer c = new

Zhang Phil 2240

卡诺图化简法

目录 1.学前需要了解知识点 2.卡诺图(karnaugh map) 3.逻辑函数的卡诺图化简法 4.总结 1.学前需要了解知识点 最小项的定义 最小项的表示方法 最小项的相邻性 最小项的定义:一个函数的某个乘积项包含了函数的全部变量,其中每个变量都以原变量或反变量的形式出现,且仅出现一次,则这个乘积项称为该函数的一个标准积项,通常称为最小项。 最小项的表示方法:通常用来表...

hahasusu的专栏 17万+

JAVA多线程之生产者消费者模型

生产者消费者模型 所谓的生产者消费者模型,是通过一个容器来解决生产者和消费者的强耦合问题。通俗的讲,就是生产者在不断的生产,消费者也在不断的消费,可是消费者消费的产品是生产者生产的,这就必然存在一个中间容器,我们可以把这个容器想象成是一个货架,当货架空的时候,生产者要生产产品,此时消费者在等待生产者往货架上生产产品,而当货架满的时候,消费者可以从货架上拿走商品,生产者此时等待货架的空位,这样不断...

L_R 2万+

西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践

本文详细解析了西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践。通过实际案例和代码示例,介绍了状态机的基础认知、硬件配置、逻辑开发、调试技巧以及与MES系统集成的高级应用,帮助工程师高效实现设备自动化控制。

weixin_29255731的博客 531

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力,从而更好地区分非正常图像。如图一所示。差异(differences):MemSeg引入人工模拟的异常图像在训练阶段使模型能够区分正常和异常的图像,减轻了半监督学习只能用正常样本进行训练的不足,然后在推理阶段可以直接输入图像无需做任何后处理。共性(commonalities):MemSeg引入了一个记忆池来记录正常样本的通用模式,在训练和推理阶段,比较输入图像和记忆池中的样本之间的差异,为异常区域的定位提供有用的信息。

斯人若彩虹,遇上方知有! 4841

多线程编程之生产者消费者模型—C/C++语言实现

写该篇博客原因:生产者-消费者模型挺常用的,笔者记性又不好,人也比较笨,只好自己写着玩,以后自己用自己看自己写的博客就是。╮(๑•́ ₃•̀๑)╭ 本博客为参照书《深入理解计算机系统》来通过信号量来实现生产者—消费者模型。 生产者—消费者模型:生产者和消费者线程共享一个有n个槽(slots)的有限缓冲区。生产者不停的生产新的项目(item),并把它们插入到缓冲区中。消费者线程不断地从缓冲区取...

空 5464

基于MYD-YT153与AD7616的16通道高速ADC采集系统实战指南

在嵌入式系统与工业数据采集领域,模拟信号采集是连接物理世界与数字系统的关键技术。其核心原理是通过模数转换器(ADC)将连续的模拟电压信号转换为离散的数字码值,供处理器处理。这项技术的价值在于实现了对温度、压力、振动等关键物理量的精确感知与数字化,是工业自动化、设备监测、科学实验等场景的基石。本文聚焦于**多通道**、**高精度**采集这一常见需求,深入剖析如何利用全志T153处理器的LocalBus并行总线接口,高效驱动ADI的16位、16通道同步采样ADC芯片AD7616,构建一个稳定可靠的高速数据采集系

weixin_30335353的博客 443

JAVA多线程(三)生产者消费者模式及实现方法

介绍了生产者消费者模式以及实现方法(wait&notify,阻塞队列

橙子wj的博客 1万+

PCL 点云拟合 最小二乘法拟合平面

在点云处理领域,最小二乘法(Least Squares)拟合是一种常用的数学方法,用于估计数据点的最佳拟合曲线或平面。平面拟合广泛应用于点云数据处理中的地面检测、物体表面分析等任务。 本文将介绍如何使用PCL库实现基于最小二乘法的平面拟合算法,通过拟合点云数据中的平面,来提取出数据的平面部分。

纵马踏花向自由 1026

基于YOLOv11的手写数字与符号识别系统设计与实现

手写数字与符号识别系统需要丰富多样的训练数据才能达到理想的泛化性能。MNIST:包含70,000个手写数字样本(0-9),28x28灰度图像优点:干净整齐,适合初学者缺点:多样性不足,只有数字EMNIST:MNIST的扩展,包含数字、字母(大小写)和特殊符号样本量:814,255张图像覆盖62个类别(10数字+26小写字母+26大写字母)HASYv2:专门的手写符号数据集包含369个不同符号类别约168,000个标注实例包括数学符号、箭头、括号等:英文手写文本数据库。

YOLO 291

C++实现生产者和消费者模型

C++实现生产者和消费者模型 C++实现生产者和消费者模型1、实现细节1、单生产者-单消费者模型参考 C++实现生产者和消费者模型 1、实现细节 具体的实现逻辑是构建一个queue来存储生产的数据,queue不满时可以生产,不空时可以消费。 对于这个队列,采用阻塞队列的实现思路。 先实现构造函数,初始化一个unique_lock供condition_variable使用。 如何在类里面使用unique_lock等需要初始化,并且初始化会加锁的对象。这要研究下。我的理解是构造列表初始化,然后函数体里unl

JMW1407的博客 1万+

PCL Super4PCS算法实现点云粗配准(版本一)【2025最新版】

Win11系统下实现[Super4PCS: Fast Global Pointcloud Registration via Smart Indexing一文中的配准算法。

点云侠的博客 3378

【Linux线程】Linux多线程实践:深入生产者消费者模型

生产者消费者模型描述了一个或多个生产者线程生成数据,并将其放入缓冲区,同时一个或多个消费者线程从缓冲区中取出数据进行处理的过程。这种模式不仅有效地实现了数据的生成与处理之间的解耦,还通过引入缓冲区来平衡生产者和消费者之间的速度差异,从而提高了系统的整体效率和稳定性

EterNity_TiMe_的计算机学习之路 2857

LeRobot X-VLA:首个适用于任意机器人、任意任务的软提示机器人基础模型

X-VLA是一种基于软提示的视觉-语言-动作模型,通过可学习嵌入向量编码不同机器人配置,实现跨平台统一控制。该框架采用两阶段训练:先在29万次多平台任务中学习通用策略,再通过微调少量参数(仅1%)适配新机器人。实验表明,0.9B参数的X-VLA在6个仿真和3个真实平台上表现优异,如LIBERO任务达93%成功率,布料折叠任务100%完成。其核心创新是将硬件差异视为"任务",用软提示引导Transformer处理异构数据,为机器人基础模型提供可扩展方案。

2506_90492529的博客 1241

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

linux:生产者消费者模型

本文是对于生产者消费者模型的知识总结以上就是我对于线程同步的总结。

li209779的博客 2765

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【多线程】深入剖析生产者-消费者模型

⽣产者消费者模式就是通过⼀个容器来解决⽣产者和消费者的强耦合问题。 ⽣产者和消费者彼此之间不直接通讯,⽽通过阻塞队列来进⾏通讯,所以⽣产者⽣产完数据之后不⽤等待消费者处理,直接扔给阻塞队列,消费者不找⽣产者要数据,⽽是直接从阻塞队列⾥取.

acm_pn的博客 1818

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Linux多线程——生产者消费者模型

一.生产者消费者模型 1.1 什么是生成者消费者模型 一个进程中的线程有两种角色,一种是生产者,一种是消费者。生产者为消费者提供任务,消费者拿到任务,解决任务。在生成者和消费者之间还有一个"交易场所",是一个内存块。生成者线程将任务放到内存块中,消费者线程在内存块中拿任务。当内存块数据达到一高水位线时,生产者会进行等待,唤醒消费者拿任务,当内存块数据达到一低水位线时,消费者会等待,并且唤醒生产者生产任务。 生成者,消费者存在着3种关系。生产者和生产者之间......

weixin_57023347的博客 4490

【Linux】生产者消费者模型代码实现和信号量

下面我们实现基于阻塞队列的生产消费模型: 首先我们创建一个头文件用来放阻塞队列的类: 这个类也很简单,只需要有一个普通队列,一个记录队列容量的变量,一个互斥锁(保护共享资源的安全),一个条件变量(维护线程的互斥与同步)。类中最重要的两个接口是push和pop,然后构造和析构函数必须要有。下面进入测试文件: 在测试文件中,首先我们要有一个阻塞队列对象,然后创建两个线程,一个代表生产者一个代表消费者。然后我们创建这两个线程并且将阻塞队列传进去,这样这两个线程就能看到同一个缓冲区了。最main函数返回前记

Sxy_wspsby的博客 2077

【Linux】生产者消费者模型

🍁 🍃 🍂 🌿。

m0_60338933的博客 1903

【Linux多线程】生产者消费者模型

本篇博客将会介绍Linux多线程中一个非常重要的模型——生产者消费者模型

m0_74215144的博客 1612

生产者消费者模型

将上述场景例比到我们实际的软件开发过程中,经常会见到这样一幕:代码的某个模块负责生产数据(供货商),而生产出来的数据却不得不交给另一模块(消费者)来对其进行处理,在这之间我们必须要有一个类似上述超市的东西来存储数据(超市),这就抽象除了我们的生产者/消费者模型。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。

kalvin_y_liu的博客 6940

『Linux』第九讲:Linux多线程详解(四)_ 生产者消费者模型

生产者消费者模型详解

枫叶先生的博客 2052

生产者消费者模型你知道多少

进入正题之前先说点故事。从最开始学java的那里开始:我是从08年下半年开始学Java,在《我的六年程序之路》中提到了一些。当时比较简单,每天看尚学堂的视频(对于初学者而言看视频好一些。),然后写代码。比较清楚的记得马士兵讲到生产者消费者模型的时候还大谈特谈要是掌握了这个工资可以+1000(现在回忆起有点像历史一样,多少有些伤感)。

百恼的专栏 4万+

Python生产者消费者模型

生产者消费者模型是一种解耦模型,生产者和消费者在不同的时间段内共用同一个存储空间。当生产者生产数据时,消费者可以同时从缓冲区中取出数据进行消费。这样,生产者和消费者之间相互解耦,不需要关心对方的存在,实现了高效的资源利用和并发处理。

一只程序猿子的博客 1880
上一篇: Java使用synchronized进行多线程同步
下一篇: JVM垃圾回收流程
bingoCoder
博客等级 码龄10年 1400粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值