2025年操作系统进程同步机制与互斥策略实践解析.docx
湖南农业大学信息科学技术学院学生实验报告
姓名:_年级专业班级日期_年11月25日成绩_
课程名称
操作系统
试验名称
进程同步和互斥
试验类型
验证设计综合创新
【试验目的、规定】
(1)通过编写程序实现进程同步和互斥,掌握有关进程(线程)同步与互斥的原理,以及处理进程(线程)同步和互斥的算法,从而深入巩固进程(线程)同步和互斥等有关的内容。
(2)理解Windows/XP中多线程的并发执行机制,线程间的同步和互斥。
(3)学习使用Windows/XP中基本的同步对象,掌握对应的API函数。
(4)掌握进程和线程的概念,进程(线程)的控制原语或系统调用的使用。
【试验内容】
在WindowsXP操作系统下,使用java等编程语言,采用进程(线程)同步和互斥的技术编写程序实现生产者-消费者问题。
【试验环境】(含重要设计设备、器材、软件等)装有JDK1.6的PC电脑一台
【试验环节、过程】(含原理图、流程图、关键代码,或试验过程中的记录、数据等)
生产者进程(进程由多种线程构成)生产信息,例如它可以是计算进程。消费者进程使用信息,它可以是输出打印进程。由于生产者和消费者彼此独立,且运行速度不确定,因此很也许出现生产者已产生了信息而消费者却没有来得及接受信息这种状况。为此,需要引入由一种或者若干个存储单元构成的临时存储区,以便寄存生产者所产生的信息,
平滑进程间由于速度不确定所带来的问题。这个临时存储区叫做缓冲区,一般用一维数组来表达。由一种或若干个存储单元构成的缓冲区叫作“有穷缓冲区”。下面我们来分析一下有穷缓冲的生产者和消费者的例子。
生产者
放入产品
获取缓冲区状况
缓冲池
取出产品
获取缓冲区状况
消费者
假设有多种生产者和多种消费者,它们共享一种具有n个存储单元的有穷缓冲区Buffer(0..…-1),这
是一种环形队列。其队尾指针Rear指向目前信息应寄存的位置(Buffer[Rear]),队首指针Front指向目前取出信息的
位置(Buffer[front])。生产者进程总是把信息寄存在Buffer[Rear]中,消费者进程则总是从Buffer[Rear]中取出信
息。假如想使生产者进程和消费者进程协调合作,则必须使它们遵照如下规则:
1)只要缓冲区有存储单元,生产者都可往其中寄存信息;当缓冲区已满时,若任意生产者提出写规定,则都必须等待;
2)只要缓冲区中有消息可取,消费者都可从缓冲区中取出消息;当缓冲区为空时,若任意消费者想取出信息,则必须等待;
3)生产者们和消费者们不能同步读、写缓冲区。
开始
开始
生产者线程开始
否
判断缓冲池与否满了
是
是
放入产品到缓冲池
通过notifyO唤醒消费者线程,而生产者线程阻塞
消费者线程开始流程图
代码:判断缓冲池与否判断缓冲池中否
publicclassProducerConsu否空产品够不够取
publicstaticvoidmain(S是ig[]args){
SyncStackss=newSyncStackφ;从缓冲池中取出产品
Producerp=newProducer(ss);
Consumerc=newConsumer(ss
newThread(p).start();通过notifyO唤醒生产者线程,而消费者线程阻塞
判断缓冲池能否放下新产品
是
否
new
new
new
Thread(p).start();Thread(p).start();Thread(c).start();
在实际运行中,生产者和消费者两个线程的最开始的运行是没有先后之分的,两个线程处在同步执行的状态。
}
classWoTou{
intid;
WoTou(intid){
this.id=id;
}
publicStringtoString(){
returnWoTou:+id;
}}
classSyncStack{
intindex=0;
WoTou[]arrWT=newWoTou[6];
publics