import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @李守彬
* @version 创建时间:2015-3-5 下午02:44:52 类说明
*/
public class PC2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Q2 q = new Q2();
new Producer2(q);
new Customer2(q);
}
}
/**
* 阻塞队列
* */
class Q2 {
int n;
final Lock lock = new ReentrantLock();
final Condition canGet = lock.newCondition();
final Condition canPut = lock.newCondition();
boolean valueSet = false;
int get() {
// 实现可响应中断的锁
try {
lock.lockInterruptibly();
// 值未设置好,循环等待
while (!valueSet) {
canGet.await();
}
// 取值成功
System.out.println("Got:" + n);
// 将设置标志置为false
valueSet = false;
Thread.currentThread().sleep(1000);
// 通知设值线程
canPut.signal();
return n;
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
lock.unlock();
}
return 0;
}
void put(int n) {
try {
// 实现可响应中断的锁
lock.lockInterruptibly();
// 已经设置好了值,而且未被取走,循环等待
while (valueSet) {
canPut.await();
}
this.n = n;
// 将设置标志设置为true
valueSet = true;
System.out.println("Put:" + n);
// Thread.currentThread().sleep(1000);
// 通知取值线程,可以取值
canGet.signal();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
/**
* 生产者
* */
class Producer2 implements Runnable {
Q2 q;
public Producer2(Q2 q) {
this.q = q;
new Thread(this, "Producer").start();
}
@Override
public void run() {
// TODO Auto-generated method stub
int i = 0;
while (true) {
q.put(i++);
}
}
}
/**
* 消费者
* */
class Customer2 implements Runnable {
Q2 q;
public Customer2(Q2 q) {
this.q = q;
new Thread(this, "Customer").start();
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
q.get();
}
}
}
- 浏览: 43028 次
- 性别:
- 来自: 郑州
相关推荐
用c语言 pv操作解决生产者与消费者问题
生产者与消费者问题(操作系统)
C#编写的有关操作系统中生产者与消费者问题的实例,画面美观,生动形象的描绘了生产者与消费者之间的关系,代码部分简介易懂。
进程同步实验——生产者与消费者问题算法实现
大连理工大学操作系统大作业, 进程同步与互斥 生产者与消费者问题
该程序是我写的博客“一起talk C栗子吧(第一百零六回:C语言实例--生产者与消费者问题二)”的配套程序,共享给大家使用
上课实验用VC++做的操作系统实验之进程的互斥与同步(生产者与消费者问题),内含实验报告,希望对大家有帮助
“生产者---消费者”问题是最著名的进程同步问题。它描述了一组生产者向一组消费者提供产品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品。它是许多相互合作进程的抽象,如输入进程与计算...
大连理工大学软件学院操作系统实验 生产者与消费者问题代码 热乎出炉 复制粘贴即能运行 !
操作系统概念第七版第七单元实验 生产者与消费者问题linux下pthread代码 注释:此为刚完成的代码 请下载者主动修改 谢谢---mayy
用C++实现了计算机操作系统中的生产者与消费者问题。
利用Java多线程实现的操作系统的生产者与消费者算法,主要用到了线程的同步,等待与唤醒操作。
生产者与消费者问题 java #include #include const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度 unsigned short ProductID = 0; //产品号 unsigned short ConsumeID = 0; //将被消耗的产品号 unsigned ...
C++版生产者与消费者问题,这是经过我自己编译过的,没有问题,希望大家喜欢
本文通过多线程方法解决了生产者与消费者之间同步的问题