`
爱在爪哇
  • 浏览: 7645 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

生产者-消费者实现

阅读更多
package cn.gao.algorithm2.service;

/*
 * 经典的生产-消费者模式
 * 最简单的就是一个生产者和一个消费者对共同的缓冲区对象进行操作
 * 可扩展成多对多的生产者消费者模式
 */
public class Test9 {

	/**
	 * @param args
	 */
	static int common=0;
	/*box是生产消费者所操控的对象*/
	static class Box{
		public int values;/*缓冲区中的值*/
		public boolean full=false;/*表示对象缓冲区中为满的状态*/
		public synchronized int get()/*生产者调用对象*/
		{
			while(full==false)/*消费者需要等待缓冲区满才会去取其中的东西,不是满就一直等待*/
			{
				try {
					wait();/*等待生产者产生满缓冲区,唤醒此物*/
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			System.out.println("消费者消费"+values);
			full=false;
			notifyAll();
			return values;
		}
		public synchronized void put(int values)
		{
			while(full==true)/*只要缓冲区是满的,生产者就一直等待*/
			{
				try {
					wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			this.values=values;
			System.out.println("生产者生产"+values);
			full=true;
			notifyAll();
		}
	}

static class Productor extends Thread
{
	private Box box;
	
	public Productor(Box box) {
		super();
		this.box = box;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<6;i++)
		{
			box.put(common++);
		/*
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			*/
		}
	}
	
}
static class Comsumer extends Thread
{
	private Box box;
	
	public Comsumer(Box box) {
		super();
		this.box = box;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<6;i++)
		{
			box.get();
			/*
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			*/
		}
	}
	
}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Box box=new Box();
		Productor p1=new Productor(box);
		Productor p2=new Productor(box);
		Comsumer c1=new Comsumer(box);
		Comsumer c2=new Comsumer(box);
		p1.start();
		p2.start();
		c1.start();
		c2.start();
		

	}

}

 

0
0
分享到:
评论

相关推荐

    生产者-消费者问题的模拟实现(课设含源代码).doc

    用进程同步方法解决“生产者-消费者”问题,C或C++语言实现。 1、设计目的 通过研究进程并发和信号量机制,实现生产者-消费者问题的并发控制。 2、设计要求 1)每个生产者和消费者对有界缓冲区进行操作后,即时显示...

    用多进程同步方法演示“生产者-消费者”问题

    1、设计目的:通过研究Linux的进程机制和信号量,实现生产者消费者问题的并发控制。 2、说明:有界缓冲区内设有20个存储单元,放入取出的产品设定为1-20个整数。 3、设计要求: 生产者和消费者进程的数目不固定,可...

    以记录型信号量实现生产者-消费者问题

    以记录型信号量实现生产者-消费者问题 实验目的: 1.加深对进程同步概念的理解。 2.理解多道程序环境中,不同进程对资源访问及相互合作进程的关系的处理方法。 实验要求: 利用C语言程序模拟生产者-消费者问题和哲学...

    编程模拟实现生产者-消费者进程

    生产者-消费者问题描述的是:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能够并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将它所生产的产品...

    生产者-消费者模型模拟进程调度

    内含多个实验文档与可运行的代码 ...1. 生产者消费者对缓冲区进行互斥操作。 2. 缓冲区大小为10,缓冲区满则不允许生产者生产数据,缓冲区空则不允许消费者消费数据。 3. 生产者消费者各循环操作10次。

    多线程实现生产者---消费者模型

    操作系统实验 多线程实现生产者---消费者模型 华工版 绝对好用。。。。。。。

    操作系统之Linux下的生产者-消费者模型

    结合System V信号量机制,利用Linux下的多线程库实现了Linux下的操作系统生产者-消费者模型,具体原理可参考博文:: http://blog.csdn.net/Mikeoperfect/article/details/79431642

    利用记录型信号量解决生产者-消费者问题.doc

    利用记录型信号量解决生产者-消费者问题.doc

    多线程同步方法解决生产者-消费者问题(linux线程实现)

    设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区...

    操作系统课设用多进程同步方法演示“生产者-消费者”问题

    1、设计目的:通过研究Linux的进程同步机制和信号量,实现生产者消费者问题的并发控制。 2、说明:有界缓冲区内设有20个存储单元,放入取出的产品设定为20个100以内的随机整数。 3、设计要求: 1) 生产者与消费者均...

    生产者消费者实现进程的互斥和同步

    本实验要求设计在同一个进程地址...生产者线程生产物品时,若无空缓冲区可用,生产者线程必须等待消费者线程释放出一个空缓冲区;消费者线程消费物品时,若缓冲区为空,消费者线程将被阻塞,直到新的物品被生产出来。

    编程实现生产者消费者或读写者的同步问题

    生产者线程和消费者线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。生产者线程生产物品时,若无空缓冲区可用,生产者线程必须等待消费...

    linux下用多进程同步方法解决生产者-消费者问题源代码

    这是一个在linux系统下用多进程同步的方法解决消费者-生产者问题的源代码,是关于操作系统的。

    生产者-消费者问题.cpp

    一组生产者进程生产产品给一组消费者进程消费。一个有n个缓冲区的缓冲池,生产者一次向一个缓冲区中投入消息,消费者从一个缓冲区中取得。生产者——消费者问题实际上是相互合作进程关系的一种抽象。该类问题不允许...

    pthread实现生产者-消费者(Linux)环境

    这是一个在Linux下实现的生产者-消费者进程同步经典问题。编译是使用“gcc -pthread synchro.c -o main"。运行时使用./main后 输入两个参数,第一个是生产者数目,第二个是消费者数目。程序运行30秒结束。

    Java多线程实现生产者消费者

    编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。

    OS大作业生产者消费者同步问题的实现

    操作系统实践大作业:使用POSIX条件变量和互斥锁实现生产者、消费者同步问题,缓冲区空时消费者不能消费,当有生产者生产产品后唤醒阻塞的消费者;缓冲区满时生产者不能生产,当有消费者消费产品后唤醒阻塞的生产者...

    Win丨linux丨操作系统实验二:生产者——消费者问题

    1. 在Windows操作系统上,利用Win32 API提供的信号量机制,编写应用程序实现生产者——消费者问题。 2. 在Linux操作系统上,利用Pthread API提供的信号量机制,编写应用程序实现生产者——消费者问题。 3. 两种环境...

    生产者-消费者的Linux多线程实现.pdf

    生产者-消费者的Linux多线程实现.pdf

    生产者-消费者.cpp

    《操作系统》第四版,实验,使用P/V操作,实现多线程控制,实现生产者-消费者问题,生产者生产商品,消费者消费,使用了win32的一些函数

Global site tag (gtag.js) - Google Analytics