和尚挑水问题课程设计

和尚挑水问题课程设计

ID:25594347

大小:591.50 KB

页数:31页

时间:2018-11-21

和尚挑水问题课程设计_第1页
和尚挑水问题课程设计_第2页
和尚挑水问题课程设计_第3页
和尚挑水问题课程设计_第4页
和尚挑水问题课程设计_第5页
资源描述:

《和尚挑水问题课程设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、课程设计书学院计算机学院专业计算机科学与技术班级课程题目和尚挑水问题教师学生摘要Linux是一类Unix计算机操作系统的统称,也是自由软件和开放源代码发展中最著名的例子。Linux作为一个免费、自由软件,内核版本不断升级。新的内核修订了旧内核的bug,并增加了许多新的特性。同时也使得Linux系统更加稳定、更加安全,进一步满足用户的功能需求。 Linux中的信号量(semphore)是一种资源锁,如果有一个任务试图获得一个已经被占用的信号量时,信号量会将其推到一个等待队列中,这时处理器会重获自由从而去执行其它代码,当持有信号量的进程将信

2、号量释放后,处于等待队列中的那个任务将会被唤醒,并将获得该信号量。信号量是一种对多个进程访问共享资源进行控制的机制,其实为了解决互斥共享资源的同步问题而引入的机制。不能单独定义一个信号量,而只能定义一个信号量集,其中包括一组信号量,同一信号量集中的信号量使用同一引用ID,这样设置是为了多个资源或同步操作的需要。关键词:信号量,同步,互斥I目录1课程设计的目的及要求11.1课程设计的目的11.2课程设计的要求12准备工作22.1硬件及软件需要22.2了解信号量及信号量的系统调用函数:22.2.1信号量定义22.2.1信号量集得创建与打开s

3、emget()32.2.2信号量的操作semop()42.2.3信号量的控制semctl()63需求分析74整体设计84.1概要设计84.2程序流程图及运行结果8实验结果14总结15参考文献16附录17II1课程设计的目的及要求1.1课程设计的目的某寺庙中有小和尚、老和尚若干人。庙内有一水缸,由小和尚提水入缸,供老和尚饮用。水缸可容纳30桶水,每次入水、取水仅为1桶,不可同时进行。水取自同一水井,水井路窄,每次只能容纳一个水桶取水,设水桶个数为5个。和尚挑水问题就是使用某种机制,能够使得若干名老和尚可以顺利地喝到水,若干名小和尚之间能够

4、有条不紊地往水缸中入水。本课程设计的目的是使用Linux的信号量机制编程解决和尚挑水问题,通过本课程设计掌握Linux进程创建的方法,掌握信号量的使用方法。1.2课程设计的要求本课题所设计的系统要求实现以下功能。编写2个程序,程序1创建3个子进程,分别编号A、B、C,用于模拟3名老和尚;程序2创建3个子进程,分别编号C、D、E,用于模拟3名小和尚。通过向屏幕输出语句模拟取水过程,如输出“目前水缸水量为10桶”表示目前水缸中有存水10桶;输出“小和尚取水成功”表示从水井中成功取到1桶水;输出“小和尚倒1桶水到水缸中”表示小和尚将1桶水倒入

5、水缸中。通过观察输出语句,可以发现执行过程是否发成冲突。使用Linux的信号量机制,编写解决和尚挑水问题的代码。要求给出编译所用到的makefile文件。282准备工作2.1硬件及软件需要CentOS6.4gcc编译器vim编辑器2.2了解信号量及信号量的系统调用函数:2.2.1信号量定义  最简单的信号量是一个只有0与1两个值的变量,二值信号量。这是最为通常的形式。具有多个正数值的信号量被称之为通用信号量。在本章的其余部分,我们将会讨论二值信号量。  P与V的定义出奇的简单。假定我们有一个信号量变量sv,两个操作定义如下:  P(sv

6、) 如果sv大于0,减小sv。如果sv为0,挂起这个进程的执行。 V(sv) 如果有进程被挂起等待sv,使其恢复执行。如果没有进行被挂起等待sv,增加sv。 信号量的另一个理解方式就是当临界区可用时信号量变量sv为true,当临界区忙时信号量变量被P(sv)减小,从而变为false,当临界区再次可用时被V(sv)增加。注意,简单的具有一个我们可以减小或是增加的通常变量并不足够,因为我们不能用C,C++或是其他的编程语言来表述生成信号,进行原子测试来确定变量是否为true,如果是则将其变为false。这就是使得信号量操作特殊的地方。28信

7、号量函数定义如下: #include  intsemctl(intsem_id, intsem_num, int command, ...); intsemget(key_t key, intnum_sems, intsem_flags);intsemop(intsem_id, structsembuf *sem_ops, size_tnum_sem_ops);  事实上,为了获得我们特定操作所需要的#define定义,我们需要在包含sys/sem.h文件之前通常需要包含sys/types.h与sys/ipc.h文

8、件。而在某些情况下,这并不是必须的。  因为我们会依次了解每一个函数,记住,这些函数的设计是用于操作信号量值数组的,从而会使用其操作向比单个信号量所需要的操作更为复杂。  注意,key的作用类似于一个文件名

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。