操作系统--理发师问题

合集下载

操作系统实验五 理发师问题

操作系统实验五 理发师问题

实验题目:理发师问问题学号:201000130133 班级: 2010级计算机4班姓名:郑思雨 Email:1412561943@实验目的:1、进一步研究和实践操作系统中关于并发进程同步与互斥操作的一些经典问题的解法。

2、加深对于非对称性互斥问题有关概念的理解。

观察和体验非对称性互斥问题的并发控制方法。

3、进一步了解Linux系统中IPC进程同步工具的用法,训练解决对该类问题的实际编程、调试和分析问题的能力。

硬件环境:微机(多核,4GB 以上内存,320GB 以上硬盘)软件环境:Ubuntu-Linux 操作系统Gnome 桌面gcc version 4.1.2gedit 2.18.2OpenOffice 2.3实验步骤:1、了解实验的目的,了解并掌握与进程间通信IPC中的3个对象:共享内存、信号灯数组、消息队列到呢个有关的系统调用,并能熟练的掌握。

2、阅读实验题目并分析实验的需求。

理发店问题:假设理发店的理发室中有3个理发椅子和3个理发师,有一个可容纳4个顾客坐等理发的沙发。

此外还有一间等候室,可容纳13位顾客等候进入理发室。

顾客如果发现理发店中顾客已满(超过20人),就不进入理发店。

在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。

顾客理完发后,可向任何一位理发师付款。

但理发店只有一本现金登记册,在任一时刻只能记录一个顾客的付款。

理发师在没有顾客的时候就坐在理发椅子上睡眠。

理发师的时间就用在理发、收款、睡眠上。

(1)首先创建ipc.h文件,在里面定义生产者/消费者共用的IPC函数的原型和变量。

(2)然后创建ipc.c文件,在里面定义生产者/消费者共用的IPC 的具体的相应函数。

(3)创建sofa_control文件,在里面声明两个消息队列,当沙发空闲时则会将空闲的消息放入相应的队列中,让顾客可以进入沙发中,当理发师空闲时,也会将相应的消息放入队列中,从而可以让顾客到理发椅上进行理发。

linux理发师多线程问题

linux理发师多线程问题

用多线程同步方法解决睡眠理发师问题( Sleeping-Barber Problem)1 .操作系统:Linux2 .程序设计语言:C语言3 .设有1个理发师5把椅子(另外还有一把理发椅),几把椅子可用连续存储单元.1.技术要求:1)为每个理发师/顾客产生一个线程,设计正确的同步算法2)每个顾客进入理发室后,即时显示“Entered”及其线程自定义标识,还同时显示理发室共有几名顾客及其所坐的位置。

3)至少有10 个顾客,每人理发至少3秒钟。

4)多个顾客须共享操作函数代码。

提示:(1) 连续存储区可用数组实现。

(2) 编译命令可用:gcc -lpthread -o 目标文件名源文件名(3) 多线程编程方法参见附件。

)详细代码#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <pthread.h>#include <sys/ipc.h>#include <semaphore.h>#include <fcntl.h>#define n 5time_t end_time;sem_t mutex, customers, barbers;int count = 0;int chair [5] = {-1, -1, -1, -1, -1 };void barber(void *arg)while (time (NULL) < end_time || count>0)while (count > 0)sem_wait(&customers);sem_wait(&mutex);count--;printf ("the barber is cutting hair, count is : %d\n", count);sem_post(&mutex);sem_post(&barbers);sleep(3);void customer (void *arg)int i ,id= 0, num=0;while (time (NULL) < end_time)sem_wait(&mutex);if (count< n)count++;num= count % 5;num++;printf("customer entered:the customer %s comes in and sits at %d the chair count is:%d\n", (char *)arg, num, count);sem_post(&mutex);sem_post(&customers);sem_wait(&barbers);elsesem_post(&mutex);sleep(2);int main (int argc, char *argv[])pthread_t id1, id2, id3, id4, id5, id6, id7, id8, id9, id10, id11;int ret= 0;int i;end_time = time (NULL) + 30;sem_init (&mutex, 0, 1);ret = sem_init (&barbers, 0, 1);for (i =0;i<5;i++)chair [i] = -1;if (0!= ret)perror("sem init");ret= pthread_create (&id11, NULL, (void*)barber,"id11"); if (0!= ret)perror("create barber");ret = pthread_create ( &id1,NULL,(void*)customer, "id1"); if (0!= ret)perror("create customers");ret = pthread_create(&id2, NULL, (void*)customer, "id2"); if (0!=ret)perror("create customers");ret = pthread_create(&id3, NULL, (void*)customer, "id3"); if (0!=ret)perror("create customers");ret = pthread_create(&id4, NULL, (void*)customer, "id4"); if (0!=ret)perror("create customers");ret = pthread_create(&id5, NULL, (void*)customer, "id5"); if(0!=ret)perror("create custmers");ret = pthread_create(&id6, NULL, (void*)customer, "id6"); if (0!= ret)perror("create customers");ret = pthread_create ( &id7,NULL,(void*)customer, "id7"); if (0!= ret)perror("create customers");ret = pthread_create(&id8, NULL, (void*)customer, "id8"); if (0!=ret)perror("create customers");ret = pthread_create(&id9, NULL, (void*)customer, "id9"); if (0!=ret)perror("create customers");ret = pthread_create(&id10, NULL, (void*)customer, "id10");if (0!=ret)perror("create customers");pthread_join(id1, NULL);pthread_join(id2, NULL);pthread_join(id3, NULL);pthread_join(id4, NULL); pthread_join(id5, NULL); pthread_join(id6, NULL); pthread_join(id7, NULL); pthread_join(id8, NULL); pthread_join(id9, NULL); pthread_join(id10, NULL); pthread_join(id11, NULL); exit(0);运行结果如下。

山大操作系统实验五

山大操作系统实验五

⼭⼤操作系统实验五⼭东⼤学软件学院操作系统实验报告实验题⽬:进程互斥实验实验⽬的:进⼀步研究与实践操作系统中关于并发进程同步与互斥操作的⼀些经典问题的解法,加深对于⾮对称性互斥问题有关概念的理解。

观察与体验⾮对称性互斥问题的并发控制⽅法。

进⼀步了解Linux系统中IPC进程同步⼯具的⽤法,训练解决对该类问题的实际编程、调试与分析问题的能⼒。

实验要求:理发店问题:假设理发店的理发室中有3个理发椅⼦与3个理发师,有⼀个可容纳4个顾客坐等理发的沙发。

此外还有⼀间等候室,可容纳13位顾客等候进⼊理发室。

顾客如果发现理发店中顾客已满(超过20⼈),就不进⼊理发店。

在理发店内,理发师⼀旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。

顾客理完发后,可向任何⼀位理发师付款。

但理发店只有⼀本现⾦登记册,在任⼀时刻只能记录⼀个顾客的付款。

理发师在没有顾客的时候就坐在理发椅⼦上睡眠。

理发师的时间就⽤在理发、收款、睡眠上。

请利⽤linux系统提供的IPC进程通信机制实验并实现理发店问题的⼀个解法。

总结与分析⽰例实验与独⽴实验中观察到的调试与运⾏信息,说明您对与解决⾮对称性互斥操作的算法有哪些新的理解与认识?为什么会出现进程饥饿现象?本实验的饥饿现象就是怎样表现的?怎样解决并发进程间发⽣的饥饿现象?您对于并发进程间使⽤消息传递解决进程通信问题有哪些新的理解与认识?根据实验程序、调试过程与结果分析写出实验报告。

硬件环境:CPU: P4/1、8MHz 内存:256MB 硬盘: 10GB软件环境:Ubuntu08、4-Linux 操作系统Gnome 桌⾯2、18、3BASH_VERSION='3、2、33(1)-releasegcc version 4、1、2vi 3、1、2gedit 2、18、2OpenOffice 2、3实验步骤:1.问题分析假设理发店的理发室中有3个理发椅⼦与3个理发师,有⼀个可容纳4个顾客坐等理发的沙发。

《操作系统》打瞌睡理发师课程设计

《操作系统》打瞌睡理发师课程设计

课程设计(论文)课程名称______操作系统___________题目名称_____打瞌睡理发师问题______学生学部(系)___信息与计算机学部__专业班级_08计算机科学与技术3班____学号____ ____________学生姓名________ _____________指导教师________ _ ___________ 2010 年 12 月 28 日课程设计(论文)任务书一、课程设计(论文)的内容模拟解决打瞌睡的理发师问题:理发店内有一名理发师,一把理发椅,和N把普通的椅子。

如果没有顾客来,那么理发师就坐在理发椅上打瞌睡;当顾客到来时,就唤醒理发师。

如果顾客到来时理发师正在理发,顾客就坐下来等待。

如果N把椅子都坐满了,顾客就离开该理发店到别处去理发。

理发师刚开始理发时,先看看店里有没有顾客,如果没有,则在理发椅上打瞌睡;如果有顾客,则为等待时间最长的顾客理发,且等待人数减1。

顾客来到店里,先看看有无空位,如果没有空位,就不等了。

离开理发店;如果有空位则等待,等待人数加1;如果理发师在打瞌睡,则将其唤醒。

二、课程设计(论文)的要求与数据(1)需求分析(2)系统设计(3)模块代码能正常运行(4)提供合理的测试数据(5)设计说明文档三、课程设计(论文)应完成的工作(1)采用模块化的程序设计方法,程序书写符合规范,代码应完善。

(2)要有运行结果和过程的界面截图。

(3)对系统进行初步的错误和漏洞检测;(4)根据论文规范撰写论文,用A4纸打印并按时提交。

四、课程设计(论文)进程安排五、应收集的资料及主要参考文献[1] 郁红英,李春强.计算机操作系统.北京:清华大学出版社,2008[2] 孟庆昌.操作系统.北京:电子工业出版社,2009[3] 汤子瀛,哲凤屏.计算机操作系统.北京:电子工业出版社,2009[4] 尤晋元,史美林等.windows操作系统原理.北京:机械工业出版社,2001[5] 孟静.计算机操作系统原理教程.北京:清华大学出版社,2005[6] 广树建.新编C/C++程序设计教程.广州:华南理工出版社,2008发出任务书日期: 2010 年 12 月 10 日指导教师签名:计划完成日期: 2011 年 1 月 5 日通过对《操作系统》这门课的学习后,要求我们能够在深刻理解和应用有关经典进程的同步和互斥问题之余,能够模拟解决打瞌睡的理发师问题。

操作系统习题全解

操作系统习题全解

操作系统复习题考试必备!●进程同步1进程P1和进程P2并发执行时满足一定的时序关系,P1的代码段S1执行完后,才能执行P2的代码段S2.为描述这种同步关系, :试设计相应的信号量, :给出信号量的初始值,●:给出进程P1和P2的结构解答: 信号量变量申明为Typedef struct {int value; //信号量中的值,表示资源的数量struct PCB *L; //等待该信号量的队列}semaphore;设信号量semaphore synch;初始值为:synch.value=0●进程P1和P2的结构为P1: { P2: {⋮⋮S1 wait(synch);signal(synch); S2⋮⋮} }●进程同步2问题描述:(理发店问题)一个理发店有一间配有n个椅子的等待室和一个有理发椅的理发室。

如果没有顾客,理发师就睡觉;如果顾客来了二所有的椅子都有人,顾客就离去;如果理发师在忙而有空的椅子,顾客就会坐在其中一个椅子;如果理发师在睡觉,顾客会摇醒他。

①给出同步关系②设计描述同步关系的信号量;③给出满足同步关系的进程结构(请完成满足同步关系的进程结构)。

解答: 顾客customer应满足的同步关系为:a:顾客来时要等空的椅子,否则不进理发室b:座椅上的顾客要等理发椅空才有可能与别的顾客竞争理发椅,如果顾客坐上理发椅,就要腾空其座椅给新来顾客,同时叫理发师给其理发。

c:一旦顾客理发完,就要让别的等待顾客有机会理发。

理发师应满足的同步关系为:一旦顾客唤醒,就给顾客理发,之后进入睡觉。

信号量定义如下:Typedef struct {int value; //信号量中的值,表示资源的数量struct PCB *L; //等待该信号量的队列}semaphore;互斥信号量定义如下:Typedef struct {bool flag;struct PCB *L;}binary_semaphore;理发店问题的解决需要信号量和互斥信号量为:semaphore chair; binary_semaphore barber_chair, hair_cut;它们的初始值为:chair.value=n; barber_chair.flag=1; hair_cut.flag=0;●顾客和理发师进程分别为:customer { barber {wait(chair); do {waiting in the chair;wait(hair_cut);wait(barber_chair); cutting hair;signal(hair_cut); signal(barber_chair);sitting in barber chair for haircut; }while(1)signal(chair); }}●进程同步2设公共汽车上,司机和售票员的活动分别为:司机的活动为启动车辆,正常行车,到站停车;售票员的活动为关车门,售票,开车门。

操作系统课程设计---理发师问题的实现

操作系统课程设计---理发师问题的实现

操作系统课程设计---理发师问题的实现(总18页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March*******************实践教学*******************兰州理工大学计算机与通信学院2011年秋季学期操作系统课程设计题目:理发师问题的实现专业班级:计算机科学与技术姓名:学号:指导教师:成绩:摘要理发师问题是一个利用信号量进行PV操作的经典问题。

设计程序实现此问题,要使得理发师的活动与顾客的活动得到各自真实的模拟。

所执行的程序应体现:理发师在没有顾客的时候去睡觉,有顾客则工作;顾客在理发师工作时坐下等待,无座时离开,直至等到理发师自己理发。

关键字:理发师,顾客,PV操作。

目录摘要................................................................................................................. 错误!未定义书签。

1 设计要求........................................................................................................ 错误!未定义书签。

初始条件 ........................................................................................ 错误!未定义书签。

技术要求 ........................................................................................ 错误!未定义书签。

2 总体设计思想及开发环境与工具................................................................ 错误!未定义书签。

理发师问题操作系统课程设计

理发师问题操作系统课程设计

理发师问题操作系统课程设计河南城建学院《操作系统》课程设计报告课程名称: 《操作系统》课程设计设计题目: 理发师问题指导教师: 李蓓耿永军班级:学号:学生姓名:同组人员:成绩:评语:计算机科学与工程学院2014年6月19日前言现在计算机更新如此迅速的时代要学好计算机软件技术,特别是操作系统的学习,不仅要努力学好课本上的基础知识,还要经常在图书馆看些有关这方面的书籍,而更重要的是要有足够的实践经验,也要注重和同学的交流,经常尝试性的做些小的操作系统,对自己技术的提升会有很大的帮助。

同时,学习计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。

如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。

例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。

但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。

本操作系统课程设计,是给同学提供一个集中实验的机会。

希望同学们通过该设计加深对所学习课程的理解。

本设计的内容是基于《操作系统原理》、《C语言程序设计》和《数据结构》等内容。

本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的GNU C或C++。

完成本次课程设计,首先必须配置操作系统编写的所需的环境,包括虚拟机的建立和相应环境建立。

用VI编辑器编写相应得程序,以实现理发师进程的同步与互斥。

目录第一章.系统环境 ..................................................................... .. (1)1.1硬件环境 ..................................................................... . (1)1.2软件环境 ..................................................................... . (1)第二章.设计目的及要求 ..................................................................... .. (2)2.1设计目的 ..................................................................... . (2)2.2 要求 ..................................................................... .. (2)2.3 内容 ..................................................................... .. (2)第三章.总体设计 ..................................................................... .. (3)3.1程序设计组成框图 ..................................................................... (3)3.2 主函数流程图 ..................................................................... . (4)3.3理发师进程流程图 ..................................................................... (5)3.4 顾客进程流程图 ..................................................................... (5)3.5函数调用 ..................................................................... . (6)第四章.详细设计 ..................................................................... .. (7)4.1概要设计 ..................................................................... . (7)4.1.1 数据结构 ..................................................................... .. (7)4.1.2 多线程编译原理 ..................................................................... .. (7)4.1.3 创建线程 ..................................................................... .. (7)4.1.4 信号量 ..................................................................... (8)4.2 头文件声明 ..................................................................... .. (8)4.3函数定义 ..................................................................... . (9)4.4 变量定义 ..................................................................... (9)4.5函数实现 ..................................................................... . (9)第五章.调试与测试 ..................................................................... .. (11)5.1调试方法 ..................................................................... .. (11)5.2结果分析 ..................................................................... ..................................................... 13 第六章.设计中遇到的问题及解决方法 ..................................................................... (14)6.1出现的问题 ..................................................................... . (14)6.2解决方法 ..................................................................... ..................................................... 14 第七章.源程序清单和执行结果 ..................................................................... (16)7.1源程序清单 ..................................................................... . (16)7.2程序执行结果 ..................................................................... ............................................. 19 第八章.心得体会 ..................................................................... (20)第九章.参考文献 ..................................................................... (21)1 《操作系统》课程设计第一章.系统环境1.1硬件环境内存1GB,处理器1,硬盘(SCSI)50GB,网络适配器NAT。

操作系统--理发师问题

操作系统--理发师问题

操作系统--理发师问题正文:一:背景介绍理发师问题是一个经典的并发编程问题,涉及到同时访问共享资源的多个线程之间的同步问题。

该问题的背景可以描述为:在一个理发店里,有一个理发师和一排等待理发的顾客,每个顾客需要等待一段时间才能坐到理发椅上理发。

当有空闲的理发师时,顾客就会坐到椅子上进行理发,否则就需要等待其他顾客理发结束。

该问题需要设计一个合理的算法,保证每个顾客都能够得到理发椅上的理发服务。

二:问题分析1. 线程模型与同步机制考虑到理发师问题涉及到多个顾客同时访问共享资源(理发椅)的情况,可以使用线程模型来解决该问题。

其中,每个顾客作为一个线程,理发椅作为共享资源。

在本问题中,通过使用信号量进行同步机制的设计,保证每个顾客能够按顺序得到理发师的服务。

2. 线程同步的三个要素在解决理发师问题时,需要考虑线程同步的三个要素:互斥、有序性和死锁避免。

互斥可以通过互斥量来实现,保证只有一个线程同时访问共享资源;有序性可以通过信号量来控制,保证顾客能够按照先来后到的顺序进行理发;死锁避免可以通过设置超时等待时间来解决。

三:算法设计1. 初始条件设置首先,需要确定理发师数量、理发椅数量和顾客数量的初始设置。

可以通过命令行参数或配置文件进行设置,以适应不同场景的需求。

2. 创建线程根据顾客数量创建对应数量的线程,并将每个顾客线程的任务设置为等待理发的状态。

同时,创建理发师线程,并将理发师的任务设置为等待顾客的状态。

3. 理发师任务理发师从等待队列中取出一个顾客进行理发,理发时间可以通过随机数。

当该顾客理发结束后,理发师继续从等待队列中取出下一个顾客进行理发。

如果没有顾客在等待,则理发师进入休息状态。

4. 顾客任务顾客到达理发店后,首先判断是否有空闲的理发椅。

如果有空闲的椅子,则顾客坐下并进行理发;否则,顾客需要等待其他顾客离开理发椅后才能进行理发。

5. 同步机制使用互斥量保证理发师和顾客对共享资源的互斥访问。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计思想的说明:
打瞌睡的理发师问题是一种同步问题的抽象描述。

计算机系统中的每个进程都可以消费或生产某类资源,当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。

而当某个进程释放资源时,则它就相当一个生产者。

因此此题可看作是n个生产者和1个消费者问题。

顾客作为生产者,每到来一个就使计数器count增加1,以便让理发师理发(相当于消费)至最后一个顾客(相当于产品)。

并且,第1个到来的顾客应负责唤醒理发师;如果不是第1个到达的顾客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计数器count获得),所以可以通过一个有界缓冲区把理发师和顾客联系起来通过对信号进行P、V操作来实现有关问题和相关描述。

源程序文件:
#include<windows.h>
#include<stdio.h>
#include<iostream>
#include<process.h>
#include<conio.h>
#include<ctime>
using namespace std;
#define CHAIRS 3 //椅子的个数
#define BARBERS 1 //理发师的个数
#define CUSTOMESTOCOME 7 //将要来的顾客的数目
typedef HANDLE semaphore;
static int count=0; //记录理发店顾客的总数,初始化为0
int leaved=0; //记录理发店顾客的总数,初始化为0
int waiting=0;
time_t endtime; //关闭营业的时间
//coustomers初始化为0,最大顾客数为3
semaphore customers=CreateSemaphore(NULL,0,CHAIRS,TEXT("customers")); //barbers的数量初始化为1,假设一共有1个barber
semaphore
barbers=CreateSemaphore(NULL,BARBERS,BARBERS,TEXT("barbers"));
//建立互斥变量,用于保护共享资源
HANDLE mutex=CreateMutex(NULL,FALSE,TEXT("mutex"));
DWORD WINAPI barber(LPVOID lparameter);
DWORD WINAPI customer(LPVOID lparameter);
//理发师理发
void cutHair();
//顾客坐到椅子上等待
void getChair();
//等待顾客到来
void wait();
//顾客离开
void customerLeave();
//顾客进入
void customerEnter();
void up(HANDLE hHandle){
//对指定信号量增加指定的值
ReleaseSemaphore(hHandle,1,NULL);
//恢复线程
ResumeThread(hHandle);
}
void upMutex(HANDLE hMutex){
//释放线程拥有的互斥体
ReleaseMutex(hMutex);
}
void down(HANDLE hHandle){ //DOWN operation
//线程挂起,等待信号
WaitForSingleObject(hHandle,INFINITE);
}
int main(){
//结束时间
endtime=time(0)+20000;
//创建理发师线程
HANDLE barberThread=CreateThread(NULL,0,barber,NULL,0,NULL);
HANDLE customerThread;
//产生10个客户进程,每两个进程之间间隔一个随见时间1000~1050 while(count<CUSTOMESTOCOME)
{
//创建客户进程
customerThread=CreateThread(NULL,0,customer,NULL,0,NULL);
srand(unsigned(time(0)));
int time=rand()%1000+50;
Sleep(time);
}
//释放资源
CloseHandle(barberThread);
CloseHandle(customerThread);
CloseHandle(barbers);
CloseHandle(customers);
CloseHandle(mutex);
cout<<"离开的顾客总数为:"<<leaved<<endl;
return 0;
}
DWORD WINAPI barber(LPVOID lparameter) {
while(time(0)<endtime)
{
//没有客户,则进入睡眠状态
down(customers);
//临界区操作
down(mutex);
waiting=waiting-1;
upMutex(mutex);
//开始理发
cutHair();
//理发结束,理发师信号量加1
up(barbers);
}
return 0;
}
DWORD WINAPI customer(LPVOID lparameter){ //客户到来
customerEnter();
//临界区操作
down(mutex);
cout<<"等̨¨待äy的Ì?顾?客¨ª数ºy: "<<waiting<<endl;
cout<<"空?椅°?子Á¨®数ºy: "<<CHAIRS-waiting<<endl;
if(waiting<CHAIRS)
{ //如果有空椅子,客户等待,否则离开
if(waiting!=0)
{
//等待顾客到来
wait();
}
waiting=waiting+1;
//客户信号量加1
up(customers);
upMutex(mutex);//离开临界区
//理发师进程等待唤醒
down(barbers);
//顾客坐下来等待
getChair();
}
else
{
//释放互斥锁
upMutex(mutex);
//顾客离开
customerLeave();
}
return 0;
}
void cutHair(){
static int served=0;
served++;
cout<<理发师帮第"<<served<<"位被服务的顾客理发"<<endl;
Sleep(1000);
cout<<"第"<<served<<"位被服务的顾客理完发"<<endl;
}
void getChair(){
Sleep(1050);
}
void customerEnter(){
count++;
SYSTEMTIME sys;
GetLocalTime( &sys );
cout<<endl<<"第"<<count<<"位顾客进来"<<endl;
}
void wait(){
cout<<"有空位,第"<<count<<"位顾客就坐"<<endl;
}
void customerLeave(){
cout<<"没有空椅子,第"<<count<<"位顾客离开 ."<<endl;
leaved++;
}
输出截图:
PS:由于我对c++中处理进程、信号的函数不熟,所以有许多参考了网上的代码。

我尽量去读懂代码,并自己写上注释。

相关文档
最新文档