实验三进程同步概要1.docxVIP

  • 23
  • 0
  • 约4.9千字
  • 约 17页
  • 2017-07-09 发布于湖北
  • 举报
实验三进程同步概要1

操作系统实验二进程同步实验班级:2010211306学号名:龙佳实验目的理解进程/线程同步的方法,学会运用进程/线程同步的方法解决实际问题;了解windows系统或unix/linux系统下中信号量的使用方法。实验要求编写一个有关生产者和消费者的程序:每个生产者每次生产一个产品存入仓库,每个消费者每次从仓库中取出一个产品进行消费,仓库大小有限,每次只能有一个生产者或消费者访问仓库。要求:采用信号量机制。3:实验环境:Win7+DEV或者VS20124:实验思考与设计这是一个很典型的生产者和消费者的问题。在该题中生产者和消费者的个数显然不止一个,而且仓库的大小也是未知的,这都需要用户自己来自定义。那么我看到这题的时候我马上想到的便是写出这个问题的简化的流程图。对于生产者其流程图如下:对于消费者其流程图如下:那么这么设计的原因是什么了?首先有一个仓库需要实现互斥访问,故需要互斥控制量mutex; 然后消费者能够进入仓库的原因是因为仓库中有产品可消耗,故需要一个信号量full来表示仓库中是否有产品。那么对应的对于生产者必须是在仓库空余的条件下,才能将产品放入仓库中,故需要用信号量empty来表示此时仓库是否空余能放入生产者生产的产品。到底是用面向对象的的程序设计还是面向过程的程序设计了?由于本题我在使用面向对象的时候觉得有点繁忙,所以最终还是采用了面向过程的方法来解决该问题,故导致代码的可移植性不高。5实验接口的相关知识本次实验运行在windows的平台上,故我们需要了解相关的关于win32 API 所提供的系统调用的方法(接口函数)CreateThread(用来创建线程)CreateMutex创建一个互斥体:CreateSemaphore创建一个新的信号量:ReleaseMutex释放由线程拥有的一个互斥体ReleaseSemaphore对指定的信号量增加指定的值WaitForSingleObjectWaitForMultipleObjectsCloseHandle6:实验流程首先由用户来指定仓库的大小,以及同时进行的线程个数,此处并不进行随机创建,虽然实验结果一致。然后根据用户提供的线程对临界区的访问来确定接下来的线程是否能否完成任务,一旦完不成输出进程无法全都完成。否则则输出实验完成7:编程实现//datadefine.h#ifndef_DATA_DEFINE_H_#define_DATA_DEFINE_H#includeiostream#includewindows.htypedefHANDLESemaphore;//信号量的定义typedefintsize;//数据大小定义typedefintBoundary;//缓冲区边界定义typedefintBuffer_Kind;//定义缓冲区数据类型typedefintkind_of_request;//请求类型typedefintTime;//定义时间类型typedefintProcess_Kind;typedefintSequence_number;/*最大缓冲区*/constsizeMAX_BUFFER=256;constsizeMAX_REQUEST=20;structnode{Process_Kindcon_or_prod;//请求者的类型Timeconsume_time;//占用时间};typedefstructnodePro;#endif//Process_synchronization.h#ifndef_PROCESS_SYNCHRONIZATION_H_#define_PROCESS_SYNCHRONIZATION_H_#includedata_define.h/*缓冲区的边界设置实现一个循环队列*/Boundaryon;//上边界Boundaryoff;//下边界/*定义缓冲区数组(队列)*/Buffer_Kindbuffer[MAX_BUFFER];/*定义请求队列(包含请求的进程类型,进程所占用的时间)*/Prorequest[MAX_REQUEST];/*定义三个信号量mutex(对仓库访问的控制),empty(消费者消费的控制量),full(生产者生产的控制量)*/Semaphoremutex;Semaphorefull;Semaphoreempty;HANDLEtotal_thread[MAX_REQUEST];//总线程/*定义生产者和消费者的队列*/DWORDproduct_id[MAX_REQUEST];//生产者队列DWORDconsume_id[MAX_REQUEST];//消费者队列Sequence_numberproduct_number;//生产者的标号Process_KindPRODUCT;//生产者Proces

文档评论(0)

1亿VIP精品文档

相关文档