1、 操作系统课程设计说明书操作系统课程设计说明书 设计题目设计题目 进程通信与进程同步机制实现 学生姓名学生姓名 指导老师指导老师 学学 院院 专业班级专业班级 软件工程 1002 班 学号学号 完成时间完成时间 2013 年 1 月 9 日 一 课程设计题目 某银行提供 10 个服务窗口(7 个对私服务窗口,3 个对公服务 窗口)和 100 个供顾客等待的座位。顾客到达银行时,若有空座位, 则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使 用,有对公和对私两类号,美味顾客只能选取其中一个。当营业员空 闲时,通过叫号选取一位顾客,并为其服务。请用 P、V 操作写出进 程的同步算法。
2、二 课程设计目的 1、掌握基本的同步与互斥算法,理解银行排队系统操作模型。 2、学习使用 Windows 2000/XP 中基本的同步对象,掌握相关 API 的使用方法。 3、了解 Windows 2000/XP 中多线程的并发执行机制, 实现进程的 同步与互斥。 三课程设计要求 学习并理解生产者/消费者模型及其同步/互斥规则; 学习了解 Windows 同步对象及其特性; 熟悉实验环境,掌握相关 API 的使用方法; 设计程序,实现生产者/消费者进程(线程)的同步与互斥; 提交实验报告。 四需要了解的知识 1.同步对象 同步对象是指 Windows 中用于实现同步与互斥的实体,包括信 号量(
3、Semaphore)、 互斥量(Mutex)、 临界区(Critical Section)和事件(Events) 等。本实验中使用到信号量、互斥量和临界区三个同步对象。 2.同步对象的使用步骤: 创建/初始化同步对象。 请求同步对象,进入临界区(互斥量上锁)。 释放同步对象(互斥量解锁)。 五需要用到的 API 函数及相关函数 我们利用 Windows SDK 提供的 API 编程实现实验题目要求,而 VC 中包含有 Windows SDK 的所有工具和定义。要使用这些 API,需 要包含堆这些函数进行说明的 SDK 头文件最常见的是 Windows.h(特殊的 API 调用还需要包含其他头文
4、件)。 本实验使用到的 API 的功能和使用方法简单介绍 1、WaitForSingleObject( hSemaphoreChairs , INFINITE ); WaitForSingleObject( hMutex , INFINITE ); 功能使程序处于等待状态, 直到信号量 hHandle 出现(即其 值大于等于 1)或超过规定的等待时间 格式 DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); 参数说明 hHandle信号量指针。 dwMilliseconds等待的最长时间(INFINITE 为无限等待
5、)。 2、ReleaseMutex( hMutex ); 功能打开互斥锁,即把互斥量加 1。成功调用则返回 0 格式 BOOL ReleaseMutex(HANDLE hMutex); ReleaseSemaphore( hSemaphoreShoppers ,1,NULL); 功能对指定信号量加上一个指定大小的量。成功执行 则返回非 0 值 格式 BOOL ReleaseSemaphore(HANDLE hSemaphore, LONG lReleaseCount, LPLONG lppreviousCount ); 参数说明 hSemaphore信号量指针。 lReleaseCount信号
6、量的增量。 lppreviousCount保存信号量当前值。 3、hShoppersThread = CreateThread ( NULL ,0 , fnTreadFunction ,NULL , 0 ,NULL ); CreateThread 功能创建一个在调用进程的地址空间中执行的线程 格式 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParamiter, DWORD dwCreationFlags, Lpdword lpThread ); 参数说明 lpThr