首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
自考
用纯用户软件实现进程的互斥。对共享资源的访问要互斥进行,进程级的互斥可以通过系统提供的锁和信号量等实现,也可通过纯软件实现。用纯软件实现进程互斥地进入临界段的方法既可用于单处理机环境,也可用于多处理机环境,只要这些处理机能共享同一个存储区,且诸进程对同一主
用纯用户软件实现进程的互斥。对共享资源的访问要互斥进行,进程级的互斥可以通过系统提供的锁和信号量等实现,也可通过纯软件实现。用纯软件实现进程互斥地进入临界段的方法既可用于单处理机环境,也可用于多处理机环境,只要这些处理机能共享同一个存储区,且诸进程对同一主
admin
2016-05-14
31
问题
用纯用户软件实现进程的互斥。对共享资源的访问要互斥进行,进程级的互斥可以通过系统提供的锁和信号量等实现,也可通过纯软件实现。用纯软件实现进程互斥地进入临界段的方法既可用于单处理机环境,也可用于多处理机环境,只要这些处理机能共享同一个存储区,且诸进程对同一主存单元的访问是串行地进行的,除此以外不需要任何硬件、操作系统或程序设计语言的特殊支持。
通过纯软件来实现进程间的互斥所需共享存储区,就要通过共享内存的系统调用shmget、shmat获得。父进程的全局变量在创建子进程后,两者也是分开存放的,故即使父子进程之间也不能通过全局变量进行通信。
线程能有效地增强不同执行程序之间的通信效率。在大多数的操作系统中,独立进程之间的通信需要与核心交互,以提供进程通信所需的机制。可是,由于在同一进程中的线程共享内存,它们之间的通信就不需要调用核心。
由于同一个进程中的所有线程共享进程的资源,它们驻留在相同的地址空间和访问相同的数据。如一个线程修改了存储空间中的一项数据,其他线程访问该数据项时也会获得改变了的结果。故子线程之间就能通过进程的全局变量进行通信,也能用全局变量实现纯软件的安全锁。
试编一个多线程并发的程序,用纯软件来实现对共享资源的访问计数,最简单的互斥共享资源就是共享计数变量。
选项
答案
实现该功能的C程序为程序清单15-3。 程序清单15-3的soft_section.C程序使用Peterson 1981年发表的算法解决两个进程互斥执行临界段的算法。程序用纯用户软件实现了进入临界段的互斥控制函数enter_section和退出临界段的控制函数leave_section。enter_section保证只能由一个进程或线程能通过本函数,另外的进程或线程就在函数内的while语句中循环等待。 程序创建了两个线程对共享变量global_count进行访问计数,在一次运行中,每一个线程访问0~9次(由随机数产生器产生),并用enter_section控制线程互斥地存取global_count。为了强化互斥进入的效果,把对global_count访问计数操作拆成两句,并在两句之间插入睡眠0~2秒的sleep()函数(也由随机数产生器产生)。另外作为比较,每一个线程也计算各自访问次数,最后由主线程收集累加。从运行结果可以看出,两种独立的计数方法的结果是相同的。如果线程不调用进入临界段的互斥控制函数enter_section和退出临界段的控制函数leave_section,请读者再次编译和运行程序,并比较这两种独立的计数方法的结果。 程序清单15-3:soft_section.c #include<pthread.h> #include<stdio.h> #include<stdlib.h> #define BALSE 0 #define ARUE 1 #define N 100/*竞争资源的进程数目*/ int observer;/*轮到哪个进程观察要进入临界段的情况*/ int wanted_in[N];/*各进程希望进入临界段的标志*/ enter_section(process)/*进入临界段的互斥控制函数*/ int process;/*进程编号:0或1*/ { int other;/*对方进程号*/ other=1-process; wanted_in[process]=ARUE;/*本进程要进入临界段*/ observer=process;/*本进程要观察进入临界段的情况*/ while(observer==process&&wanted_in[other]);/*等待*/ } leave_section(process)/*退出临界段函数*/ int process; { wanted_in[process]=BALSE;/*表示离开了临界段*/ } 静define AIMES 5 int global count; /*线程执行函数,传入参数为线程序号,传出参数为项:(序号+1)*2*/ void*dowork(void*params) { int i,j,tmp,times,thread count=0; extern int global_count; j=*(int*)params; times=random()%10; for(i=0,i<times;i++){ enter_section(j); tmp=global_count; sleep(random()%3); global_count=tmp+1; leave_section(j); thread_count++; } *(int*)params=thread count; printf("the thread[%d]count=%d\n",j,thread_count); } int nthreads=2; /*运行方法:./a.out n其中n为要创建的线程数,默认为2*/ main(intargc,char**argv) { int i: pthread_t threads[100]; int thread_id[100]; int thread_count=0; extern int global_count; nthreads=1; if(argc==2) nthreads=atoi(argv[1]);//将命令行字符串参数转换为整数 srand(0); for(i=0;i<nthreads;i++){ thread_id[i]=i; /*创建线程,其中pthreaddata[i]为传给线程执行函数dowork的参数,并将结果带回*/ pthread_create(&threads[i],NULL,dowork,&thread_id[i]); } for(i=0;i<nthreads;i++){ pthread_join(threads[i],NULL);//等待子线程结束,汇合结果 thread_count+=thread_id[i]; } printf("Ahe thread_count=%d\n",thread_count); printf("Ahe global_count=%d\n",global_count); } 编译: $gcc thread_mutex.c-lpthread 本程序的enter_section和leave_section函数只能支持两个线程间的互斥。但 Peterson算法也很容易扩展到任意的N个进程,只要将enter_section函数中的while语句改成如下的形式。 while(observer==process){ if(observer!=process) break; for(i=0;wanted_in[i];i++) if(wanted_in[i]) continue; }。
解析
转载请注明原文地址:https://kaotiyun.com/show/jzAx777K
本试题收录于:
操作系统题库理工类分类
0
操作系统
理工类
相关试题推荐
入侵检测系统基于数据源可分为:基于主机、___________、混合入侵检测、基于网关的入侵检测系统及文件完整性检测系统。
某设备公司计划期内安排A、B两种产品生产,有关资源消耗及可获利润(万元/件)如题39表,该公司希望生产安排的利润最大化。试建立该问题的标准形式数学模型以原点为基础求出基础可行解,并建立初始单纯形表。
特尔斐法的预测过程因为要经过几轮信息反馈,进行预测的时间比较长,因而适用于()
对于需要量少于供应量的运输问题,可用_______的方法转化成供需相等的运输问题。()
库存管理中,只要求做到不缺货、不影响生产,而不必过分细致管理的存货是()
某单位搞农业开发。设想有三种方案,有三种自然状态,其收益预测如下表:要求:根据折中主义决策标准进行决策时:(1)折中系数a=0.6时的最优方案是哪种。(2)折中系数a在什么范围内取值时,S1为最优方案。
DNS主要是把主机名和电子地址映射为________。
下列对进程的描述正确的是()
一个计算机系统,采用多道程序设计后,使多道程序实现了()
主存容量与编址方式的确定属于计算机系统结构,主存是否采用多体交叉属于_________,主存器件的选定属于_________。
随机试题
创建了我国第一所公立幼稚师范学校——江西省实验幼稚师范学校,实验研究师范教育,为我国幼儿教育师资培训事业做出了不可磨灭的贡献的教育家是()
A.异丁基一2一氰丙烯酸盐B.可脱离性球囊C.钢圈D.鱼肝油酸钠E.碘化油多用于海绵窦动静脉瘘瘘口的阻塞栓塞物是
正常情况下胃粘膜不会被胃液所消化.是由于
空调机房与被空调房间的距离。半径宜为()m。
有一建筑,外墙厚370mm,中心线总长80m,内墙厚240mm,净长线总长为35m。底层建筑面积为600m2,室内外高差0.6m。地坪厚度100mm,已知该建筑基础挖土量为1000m3,室外设计地坪以下埋设物体积450m3,则该工程的余土外运量为(
按照2005年《普通高等学校学生管理规定》,下列哪种不是我国现行的对学生的处分种类()。
材料1有人到政府行政中心去办理审批事项,将相关的资料交至某部门,该部门受理后对其承诺三个月内审批完毕,但发现不是自己审批的权限,就按规定的时间将其转交另一审批部门,该部门接收到审批事项后,迟迟未予办理,问其原因,工作人员回答是本单位管理制度规定的
【2016年上海B第86题】城镇化率是指城镇人口占总人口的比重,2012年我国的城镇化率约为()。
在考生文件夹下,“samp1.accdb”数据库文件中已建立两个表对象(名为“员工表”和“部门表”)和一个窗体对象(名为“fEmp”)。试按以下要求顺序,完成表及窗体的各种操作:设置“员工表”职务字段值的输入方式为从下拉列表中选择“经理”、“主管”或“
第1小题:打开考生文件夹4下的Word文档WORD1.DOC,其内容如下:【WORD1.DOC文档开始】绍兴东湖东湖位于绍兴市东郊约3公里处,北靠104国道,西连城东新区,它以其秀美的湖光山色和奇兀实景而闻名,与杭州西湖、嘉兴南湖
最新回复
(
0
)