生产者消费者问题

原创 2015年07月09日 16:59:46


最近在学习线程同步问题,接触了生产者和消费者问题:

生产者生产产品、消费者消费产品,两者同时进行,怎么样实现两者的线程同步?

1.此问题中首先要搞清楚问题中有哪两个线程(生产者和消费者)

2.线程同步有什么必要性(现实生活中的实例)

3.线程之间的关系(线程之间应该有个产品的缓冲区来形成两个线程之间的关系)

4.两个线程共享同一个缓冲区

5.缓冲区满,生产者等待。缓冲区空,消费者等待

public class ProducerConsumer {
	public static void main(String[] args) {
		Store s = new Store();
		Producer p = new Producer(s);
		Producer p1 = new Producer(s);
		//Producer p2 = new Producer(s);

		Consumer su = new Consumer(s);
		//Consumer su1 = new Consumer(s);
		//Consumer su2 = new Consumer(s);

		new Thread(p).start();
		new Thread(p1).start();
		//new Thread(p2).start();
		new Thread(su).start();
		//new Thread(su1).start();
		// Thread(su2).start();
	}
}
class Product{//
	int id;
	Product(int id){
		this.id = id;
	}
	public String toString(){
		return "Product:"+id;
	}
}
class Producer implements Runnable{//
	Store s = null;
	Producer(Store s){
		this.s = s;
	}
	public void run(){
		for(int i = 0;i<10;i++){
			Product p = new Product(i);
			s.put(p);
			System.out.println("生产:"+p);
		}
	}
}
class Consumer implements Runnable{//
	Store s = null;
	Consumer(Store s){
		this.s = s;
	}
	public void run(){
		for(int i = 0;i<10;i++){
			Product p = s.get();
			System.out.println("消费:"+p);
		}
	}
}
class Store{//
	static Product[] p = new Product[10];
	static int index = 0;//
	public synchronized void put(Product pro){//
		if(index == p.length){
			try{
				this.wait();
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
		}
		this.notifyAll();
		p[index] = pro;
		index++;
	}

	public synchronized Product get(){//
		if(index == 0){
			try{
				this.wait();
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
		}
		this.notifyAll();
		index--;
		return p[index];
		
	}
}


生产者消费者问题(C实现)

原文地址:http://blog.csdn.net/chen_mama/article/details/47347261生产者消费者问题是操作系统中的一个经典的问题。他描述的是一个,多个生产者与多个消...
  • ZhichengYee
  • ZhichengYee
  • 2016年10月09日 16:28
  • 3595

(操作系统原理·第三章)生产者-消费者问题

并发与同步
  • aquial
  • aquial
  • 2017年03月17日 13:40
  • 2503

c语言描述生产者消费者问题

#include      #include      #include          typedef   HANDLE   Semaphore;   //信号量的Windows原型   #def...
  • tutb12345
  • tutb12345
  • 2010年09月05日 11:42
  • 3594

信号量与生产者消费者问题

生产者—消费者问题 生产者—消费者题型在各类考试(考研、程序员证书、程序员面试笔试、期末考试)很常见,原因之一是生产者—消费者题型在实际的并发程序(多进程、多线程)设计中很常见;之二是这种题型综合性...
  • fuzhongmin05
  • fuzhongmin05
  • 2017年01月19日 15:06
  • 3225

c#多线程之生产者与消费者问题的解决

这两天由于学习的需要,学了一下C#的多线程,并写了个经典生产者与消费者的案例,但从中也发现了一个问题,总体上感觉C#比java在各个方面来说,总是有些不如,也许是长期使用java和刚刚接触C#吧,存在...
  • erliang20088
  • erliang20088
  • 2015年05月17日 16:26
  • 569

编程实现生产者消费者问题

#include #include #include #include void *producter_f (void * arg); void *consumer_f (void *arg...
  • leo115
  • leo115
  • 2012年10月03日 11:31
  • 3221

生产者消费者问题(Linux多线程下两种实现)

生产者消费者问题是同步问题中的一种常见情况,节
  • u011056004
  • u011056004
  • 2014年08月01日 10:16
  • 3106

生产者消费者问题、Java实现

先不要着急,还是我说的,看一个问题要先从全局看,这样我们才能真正掌握其全貌,最终各个击破,了然于胸! 先来跟我了解一下如下的一些概念 1. 基础概念 基本的 程序 - Progra...
  • u010297957
  • u010297957
  • 2016年05月10日 00:11
  • 3393

生产者-消费者问题(The producer-consumer problem)

多道程序环境下的经典线程同步问题一:生产者-消费者问题(The producer-consumer problem),在这里我将使用记录型信号量、AND信号量和管程三种方式来解决这个问题。...
  • Miss_Jasmine
  • Miss_Jasmine
  • 2016年05月11日 10:51
  • 1636

操作系统:生产者消费者问题

问题描述: 单个生产者,多个消费者,多个缓冲池,利用多线程通过同步互斥原则完成数据的读取。 解决方案: 生产者与消费者之间涉及同步问题,当缓冲池中有数据时,消费者才能去读取数据;当缓冲池有空余位置时,...
  • qq_27704269
  • qq_27704269
  • 2016年06月06日 12:16
  • 3688
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:生产者消费者问题
举报原因:
原因补充:

(最多只允许输入30个字)