




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计(操作系统)题目: Linux进程同步 班级: 计算机科学与技术 姓名:指导教师: 系主任: 2017年03月02日目 录1题目分析22数据结构43流程图64实现技术75设计结论和心得91题目分析编写读者写者同步程序,要求:(1) 在Linux下用C语言编程,利用信号量实现进程同步;(2) 读写要求随机产生,如按键盘输入R或W,动态显示当前状态,有多少个读 者、写者在等待访问;每个读者写者的时间可预先设定;(3) 读者写者共享一个数据区,用数组表示,如可初始化为1、2、3、4、5、6、 7、8、9、10、;写者随即对其修改。Linux环境下相关技术:线程定义:pthread.h信号量:sem.h读写锁与互斥量相似,不过读写锁允许更高的并行性。互斥量要么是锁住状态,要不是不加锁状态,而且一次只有一个线程可以对其进行加锁。读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。读写锁有三种状态:读模式加锁,写模式加锁,不加锁。 1.当读写锁是写加锁时,在这个锁被解索之前所有企图对它加锁的线程都将要阻塞。 2.当读写锁是读加锁时,在这个锁被解索之前所有企图以读模式对它加锁的线程都可以获得访问权;以写模式加锁的线程将堵塞,并且堵塞随后的读模式加锁。这样可以避免读模式锁长期占用,导致等待的写模式锁请求一直得不到满足。 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。 信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。 内核信号量类似于自旋锁,因为当锁关闭着时,它不允许内核控制路径继续进行。然而,当内核控制路径试图获取内核信号量锁保护的忙资源时,相应的进程就被挂起。只有在资源被释放时,进程才再次变为可运行。 只有可以睡眠的函数才能获取内核信号量;中断处理程序和可延迟函数都不能使用内核信号量。 内核信号量是struct semaphore类型的对象,它在中定义:struct semaphore atomic_t count; int sleepers; wait_queue_head_t wait;count:相当于信号量的值,大于0,资源空闲;等于0,资源忙,但没有进程等待这个保护的资源;小于0,资源不可用,并至少有一个进程等待资源。wait:存放等待队列链表的地址,当前等待资源的所有睡眠进程都会放在这个链表中。sleepers:存放一个标志,表示是否有一些进程在信号量上睡眠。 通过对读写锁以及信号量的理解,以及对题目的分析,我们需要用信号量来实现进程间的同步,通过读写锁来访问临界资源。2数据结构读者写者问题中涉及的数据结构包括读者、写者共用的缓冲区,读写锁,以及同步需要的信号量集。主要应用头文件以及主要变量定义和初始化如下:#include#includesem_t my_sem;int a10=1,2,3,4,5,6,7,8,9,10;pthread_rwlock_t rwlock;sem_init(&my_sem,0,3);pthread_rwlock_init(&rwlock,NULL);读线程的工作如下:void * pthread_read(void *arg)int id;while(flag)if(sem_wait(&my_sem)=0)pthread_rwlock_rdlock(&rwlock);/printf(Im %d readn,(int)arg);srand(time(0);id=rand()%10;printf(Im %d readthread! Im reading the %d shu: %dn,(int)arg,id,aid);sleep(3);if(flag2)count_read+;pthread_rwlock_unlock(&rwlock);sem_post(&my_sem);sleep(2);printf(Im the %d read_thread,exit!n,(int)arg);pthread_exit(void *)1);写线程的工作如下:void *pthread_write(void *arg)int id;int num;while(flag)if(sem_wait(&my_sem)=0)pthread_rwlock_wrlock(&rwlock);srand(time(0);id=rand()%10;num = rand()%20;aid=num;printf(Im %d writethread!Im writing the %d shu:%dn,(int)arg,id,num);sleep(3);if(flag2)count_write+;pthread_rwlock_unlock(&rwlock);sem_post(&my_sem);sleep(1); printf(Im the %d write_thread. exit!n,(int)arg);pthread_exit(void *)1);3流程图读、写线程流程图如下图所示。 4实现技术 为了实现上述设计,使用Linux系统环境,采用C语言。具体采用的技术如下:(1)通过Linux内核信号量机制实现进程同步。(2)通过读写锁来访问临界资源。(3)采用模拟随机数的方法随机访问缓冲区内的资源。 实现步骤如下:(1)定义信号量集,定义读写锁,并将其初始化。(2)根据输入的读写线程的数量分别创建线程。(3)在读写线程中分别构造相应代码,通过wait信号量实现进程同步。(4)对临界区加上读写锁,防止数据出现紊乱。运行结果如下:5设计结论和心得通过课程设计得到如下结论:(1)如果读写锁当前没有读者,也没有写者,那么写者可以立刻获得读写锁,否则 它必须自旋在那里,直到没有任何写者或读者。如果读写锁没有写者,那么读者可以立即获得该读写锁,否则读者必须自旋在那里,直到写者释放该读写锁。一次只有一个线程可以占有写模式的读写锁, 但是可以有多个线程同时占有读模式的读写锁. 正是因为这个特性,当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁的线程都会被阻塞.当读写锁在读加锁状态时, 所有试图以读模式对它进行加锁的线程都可以得到访问权, 但是如果线程希望以写模式对此锁进行加锁, 它必须直到所有的线程释放锁.通常, 当读写锁处于读模式锁住状态时, 如果有另外线程试图以写模式加锁, 读写锁通常会阻塞随后的读模式锁请求, 这样可以避免读模式锁长期占用, 而等待的写模式锁请求长期阻塞.读写锁适合于对数据结构的读次数比写次数多得多的情况. 因为, 读模式锁定时可以共享, 以写模式锁住时意味着独占。(2)信号量可以分为二进制信号量(binary semaphore)、整型信号量(integer semaphore)和记录型信号量(record semaphore)。信号量通过一个计数器控制对共享资源的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减一。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。 计数器计算的结果是允许访问共享资源的通行证。因此,为了访问共享资源,线程必须从信号量得到通行证, 如果该信号量的计数大于0,则此线程获得一个通行证,这将导致信号量的计数递减,否则,此线程将阻塞直到获得一个通行证为止。当此线程不再需要访问共享资源时,它释放该通行证,这导致信号量的计数递增,如果另一个线程等待通行证,则那个线程将在那时获得通行证。有如下几点心得体会:(1) 读写锁比互斥量允许更高的并行性。互斥量要么是锁住状态,要不是不加锁状态,而且一次只有一个线程可以对其进行加锁。读写锁有三种状态:读模式加锁,写模式加锁,不加锁。当读写锁是写加锁时,在这个锁被解索之前所有企图对它加锁的线程都将要阻塞;当读写锁是读加锁时,在这个锁被解索之前所有企图以读模式对它加锁的线程都可以获得访问权
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年驾照三力测试试题题库及答案
- 阿里地区2024-2025学年七年级上学期语文期中模拟试卷
- 安徽省2024年高二学业水平合格性考试物理考试题目及答案
- 2025 年小升初太原市初一新生分班考试英语试卷(带答案解析)-(人教版)
- 2025 年小升初承德市初一新生分班考试数学试卷(带答案解析)-(人教版)
- 天津2025年上半年造价工程师考试造价管理:工程项目目标控制的内容试题
- 社区老年食品安全知识培训课件
- 北师大版四年级上册数学第七-八单元 生活中的负数、数学好玩 可能性检测题 (无答案)
- 代销服装协议合同范本
- 法院卫生保洁合同范本
- T-SCSTA001-2025《四川省好住房评价标准》
- 住院精神疾病患者自杀风险护理
- GB/T 17395-2008无缝钢管尺寸、外形、重量及允许偏差
- GB 15630-1995消防安全标志设置要求
- 实习协议模板(最新版)
- 《新视野大学英语预备级1》教案
- 车间拆除及场地土壤治理与地下水修复工程项目技术方案工程方案和设备方案
- 无跨越架封网装置计算程序(直接求解)
- 《病理检验技术》课程标准
- 医务人员礼仪培训
- 体检中心销售技巧销售话术
评论
0/150
提交评论