linux信号量机制编程设计说明书

linux信号量机制编程设计说明书

ID:1343581

大小:549.00 KB

页数:28页

时间:2017-11-10

linux信号量机制编程设计说明书_第1页
linux信号量机制编程设计说明书_第2页
linux信号量机制编程设计说明书_第3页
linux信号量机制编程设计说明书_第4页
linux信号量机制编程设计说明书_第5页
资源描述:

《linux信号量机制编程设计说明书》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux信号量机制编程设计说明书1课程设计的目的及要求1.1课程设计的目的某寺庙中有小和尚、老和尚若干人。庙内有一水缸,由小和尚提水入缸,供老和尚饮用。水缸可容纳30桶水,每次入水、取水仅为1桶,不可同时进行。水取自同一水井,水井路窄,每次只能容纳一个水桶取水,设水桶个数为5个。和尚挑水问题就是使用某种机制,能够使得若干名老和尚可以顺利地喝到水,若干名小和尚之间能够有条不紊地往水缸中入水。本课程设计的目的是使用Linux的信号量机制编程解决和尚挑水问题,通过本课程设计掌握Linux进程创建的方法,掌握信号量的使用方法。1.2课程设计的要求本课题所设计的系统要求实现以下功能。编

2、写2个程序,程序1创建3个子进程,分别编号A、B、C,用于模拟3名老和尚;程序2创建3个子进程,分别编号C、D、E,用于模拟3名小和尚。通过向屏幕输出语句模拟取水过程,如输出“目前水缸水量为10桶”表示目前水缸中有存水10桶;输出“小和尚取水成功”表示从水井中成功取到1桶水;输出“小和尚倒1桶水到水缸中”表示小和尚将128桶水倒入水缸中。通过观察输出语句,可以发现执行过程是否发成冲突。使用Linux的信号量机制,编写解决和尚挑水问题的代码。要求给出编译所用到的makefile文件。2准备工作2.1硬件及软件需要CentOS6.4gcc编译器vim编辑器2.2了解信号量及信号量的

3、系统调用函数:2.2.1信号量定义  最简单的信号量是一个只有0与1两个值的变量,二值信号量。这是最为通常的形式。具有多个正数值的信号量被称之为通用信号量。在本章的其余部分,我们将会讨论二值信号量。  P与V的定义出奇的简单。假定我们有一个信号量变量sv,两个操作定义如下:  P(sv) 如果sv大于0,减小sv。如果sv为0,挂起这个进程的执行。 V(sv) 如果有进程被挂起等待sv,使其恢复执行。如果没有进行被挂起等待sv,增加sv。 28信号量的另一个理解方式就是当临界区可用时信号量变量sv为true,当临界区忙时信号量变量被P(sv)减小,从而变为false,当临界区再

4、次可用时被V(sv)增加。注意,简单的具有一个我们可以减小或是增加的通常变量并不足够,因为我们不能用C,C++或是其他的编程语言来表述生成信号,进行原子测试来确定变量是否为true,如果是则将其变为false。这就是使得信号量操作特殊的地方。信号量函数定义如下: #include  intsemctl(intsem_id, intsem_num, int command, ...); intsemget(key_t key, intnum_sems, intsem_flags);intsemop(intsem_id, structsembuf *sem_o

5、ps, size_tnum_sem_ops);  事实上,为了获得我们特定操作所需要的#define定义,我们需要在包含sys/sem.h文件之前通常需要包含sys/types.h与sys/ipc.h文件。而在某些情况下,这并不是必须的。  因为我们会依次了解每一个函数,记住,这些函数的设计是用于操作信号量值数组的,从而会使用其操作向比单个信号量所需要的操作更为复杂。  注意,key的作用类似于一个文件名,因为他表示程序也许会使用或是合作所用的资源。相类似的,由semget所返回的并且为其他的共享内存函数所用的标识符与由fopen函数所返回的FILE *十分相似,因为他被进程用

6、来访问共享文件。而且与文件类似,不同的进程会有不同的信号量标识符,尽管他们指向相同的信号量。key与标识符的用法对于在这里所讨论的所有IPC程序都是通用的,尽管每一个程序会使用独立的key与标识符。282.2.1信号量集得创建与打开semget()semget函数创建一个新的信号量或是获得一个已存在的信号量键值。调用原型:intsemget(key_tkey,intnum_sems,intsem_flags);第一个参数key是一个用来允许不相关的进程访问相同信号量的整数值。所有的信号量是为不同的程序通过提供一个key来间接访问的,对于每一个信号量系统生成一个信号量标识符。信号

7、量键值只可以由semget获得,所有其他的信号量函数所用的信号量标识符都是由semget所返回的。 还有一个特殊的信号量key值,IPC_PRIVATE(通常为0),其作用是创建一个只有创建进程可以访问的信号量。这通常并没有有用的目的,而幸运的是,因为在某些Linux系统上,手册页将IPC_PRIVATE并没有阻止其他的进程访问信号量作为一个bug列出。  num_sems参数是所需要的信号量数目。这个值通常总是1。 sem_flags参数是一个标记集合,与open函数的标记十分类似。低九位

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

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

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