首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
自考
线程能有效地增强不同执行程序之间的通信效率。在大多数的操作系统中,独立进程之间的通信需要与核心交互,以提供进程通信所需的缓冲区。因为父进程的全局变量,在创建子进程后,两者也是分开存放的,所以即使父子进程之间也不能通过全局变量进行通信。可是,由于在同一进程中
线程能有效地增强不同执行程序之间的通信效率。在大多数的操作系统中,独立进程之间的通信需要与核心交互,以提供进程通信所需的缓冲区。因为父进程的全局变量,在创建子进程后,两者也是分开存放的,所以即使父子进程之间也不能通过全局变量进行通信。可是,由于在同一进程中
admin
2016-05-14
39
问题
线程能有效地增强不同执行程序之间的通信效率。在大多数的操作系统中,独立进程之间的通信需要与核心交互,以提供进程通信所需的缓冲区。因为父进程的全局变量,在创建子进程后,两者也是分开存放的,所以即使父子进程之间也不能通过全局变量进行通信。可是,由于在同一进程中的线程共享进程的内存空间,如一个线程修改了存储空间中的一项数据,其他线程访问该数据项时也会获得改变了的结果。因此子线程之间就能通过进程的全局变量进行通信。
编一个C程序,使用进程的全局变量作为输入输出的缓冲区,线程1一次读入一个字符串,将其存入缓冲区,线程2从缓冲区取出数据,输出打印,用线程的互斥锁实现两个线程间韵同步。程序调试成功后用I/O转向再测试程序,标准输入输出都改为文件。
选项
答案
实现该功能的C程序为程序清单15-2。 在程序清单15-2的pthread_comm.c中,主线程创建两个线程,线程1一次读入一个字符串,将其存入缓冲区,线程2从缓冲区取出数据,输出打印。主线程先创建两个子线程,再初始化锁变量,使缓冲区初态为空,通过pthread_join等待子线程终止。当一个线程1将字符串存入缓冲区后,缓冲区状态为已存入,线程2将缓冲区中的字符串取出并打印,缓冲区状态为空,两个线程用互斥锁pthread_rnutex_lock和缓冲区状态标志flag实现互斥和同步,如此循环执行。注意,当一个线程用pthread_mutex_lock上锁,进入临界区后,当发现根据buf的flag标志不能进行存入或取出数据时,就要执行pthread_mutex_unlock操作,以让另一个进程通过pthread_mutex_lock操作进入临界区。当然本进程也可能如此循环地执行pthread_mutex_lock和pthread_mutex_unlock,这就是“自旋锁”。 为了节省处理机时间,可以在这种情况下插入sleep语句,但这与线程的同步无关。 程序清单15-2:pthread_mutex.c #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<string.h> pthread_mutex_t lock=PAHREAD_MUAEX_INIAIALIZER; /*初始化锁后,锁是关闭的*/ struct buf_s{ int flag; char buffer[256]; }buf; main() { pthread_t th_1,th_2;/*两个线程*/ void *put_buf();/*线程1执行的输入和存人缓冲区的函数*/ void *get_buf();/*线程2执行的从缓冲区读出和打印的函数*/ pthread_create(&th_1,NULL,put_buf,NULL);/*创建线程l*/ pthread_create(&th_2,NULL,get_buf,NULL);/*创建线程2*/ buf.flag=0;/*设置初态为缓冲区空*/ pthread_join(th_1,NULL);/*等待子线程1结束*/ pthread_join(th_2,NULL);/*等待子线程2结束*/ } void*put buf()/*线程1并发执行的函数*/ { while(1){ pthread_mutex_lock(&lock)j/*关锁,竞争buf*/ if(buf.flag==0){/*缓冲区空*/ printf("th_1:input string:"); gets(buf.buffer); if(strlen(buf.buffer)!=0)/*读入空串,设置终止运行标志*/ buf.flag=1; else{ buf.flag=2;/*设置终止运行标志*/ } }else Sleep(1); pthread_mutex_unlock(&lock);/*开锁*/ } } void*get_buf()/*线程2并发执行的函数*/ { while(1){ pthread_mutex_lock(&lock);/*关锁,竟争buf*f if(buf.flag==1){/*缓冲区中已存入信息*/ printf("th_2 print:%s.\n",buf.buffer);/*输出缓冲区中信息*/ buf.flag=0;/*缓冲区空标志*/ }else if(buf.flag==2)/*终止运行标志*/ exit(0); else sleep(1); pthread mutex_unlock(&lock);/*开锁*/ } }。
解析
转载请注明原文地址:https://www.kaotiyun.com/show/ziNx777K
本试题收录于:
操作系统题库理工类分类
0
操作系统
理工类
相关试题推荐
简述建筑工程技术经济分析需要经历的步骤。
网络安全解决方案的层次划分中,用户认证在网络和信息安全中属于技术措施的第一道大门,最后防线为____________。
在入侵检测分析模型中,状态转换方法属于___________检测。
在计算机病毒检测手段中,下面关于特征代码法的表述,错误的是()
在不确定条件下进行决策,下列哪个条件是不必要的()
网络操作系统中,可以有效地解决进程间的同步和互斥问题的是()
在具有多线程机制的操作系统中,进程与线程的关系是()
当信号量S≤0时,表示无资源可利用,此时S的绝对值表示信号量S的阻塞队列中的________。
简述进程与程序的联系和区别。
简述信号量的物理意义。
随机试题
A.饱餐或食油腻食物后有上腹持续性疼痛,严重者有畏寒、高热B.腹痛、寒战高热和黄疸(夏科三联征)C.腹痛、寒战高热、黄疸、休克和精神症状五联征D.突然发作的剑突下钻顶样绞痛,阵发性加重急性胆囊炎临床表现是
儿童心理健康的标准不包括
甲状腺激素是由
某车间可从A、B两种新设备中选择一种来更换现有旧设备。设备A使用寿命期为6年,设备投资10000元,年经营成本前三年平均为5500万元,后三年平均为6500万元,期末净残值为3500万元。设备B使用寿命期6年,设备投资12000万元,年经营成本前
关于竣工结算原则,正确的有()。
甲公司是ABC会计师事务所的常年审计客户。A注册会计师负责审计甲公司2013年度财务报表,确定财务报表整体的重要性为240万元。资料一:A注册会计师在审计工作底稿中记录了所了解的甲公司情况及其环境,部分内容摘录如下:(2)20
下列符合儿童动作发展规律的是
在某国,10年前放松了对销售拆锁设备的法律限制后,盗窃案发生率急剧上升。因为合法购置的拆锁设备被用于大多数盗窃案,所以重新引入对销售该设备的严格限制将有助于减少该国的盗窃发生率。最有力地支持以上论述的一项是()。
你作为信息报送工作的负责人,发现一些单位报送的信息不及时,而且内容也不够出彩,于是你就召开了一次座谈会。在会上,有的人反映没有时间写,有的人因为没有参与具体的工作,不知道怎么写;有的人说自己只是一个技术人员,不会写这些信息报送。你作为这个座谈会的负责人,该
央行在公开市场业务上大量抛售有价证券,意味着货币政策()。(2008年金融联考)
最新回复
(
0
)