首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
自考
编一个C程序,使用户进程的全局变量作为输入输出的缓冲区,线程1一次读入一个字符串,将其存入缓冲区,线程2从缓冲区取出数据,输出打印,用线程的条件变量实现两个线程间的同步。程序调试成功后用I/O转向再测试程序,标准输入输出都改为文件。 可以用条件变量实现线程
编一个C程序,使用户进程的全局变量作为输入输出的缓冲区,线程1一次读入一个字符串,将其存入缓冲区,线程2从缓冲区取出数据,输出打印,用线程的条件变量实现两个线程间的同步。程序调试成功后用I/O转向再测试程序,标准输入输出都改为文件。 可以用条件变量实现线程
admin
2016-05-14
32
问题
编一个C程序,使用户进程的全局变量作为输入输出的缓冲区,线程1一次读入一个字符串,将其存入缓冲区,线程2从缓冲区取出数据,输出打印,用线程的条件变量实现两个线程间的同步。程序调试成功后用I/O转向再测试程序,标准输入输出都改为文件。
可以用条件变量实现线程之间的同步。条件变量就像是一面旗子,用于通知需要同步的进程。条件变量函数总是和互斥锁在一起使用。与一般的锁变量不同,与条件变量相关锁的常态是锁住的,而在执行了pthread_cond_wait(&flag,&lock)等待条件变量后,互斥锁lock就打开了,然后等待条件变量的变化。如果在调用此函数之前,互斥量没有被锁住,函数执行的结果是不确定的。在该函数返回之前,该函数自动将指定的互斥量重新锁住。
pthread_cond_slgnal函数通过条件变量发消息。若有多个线程都在等待,只唤醒它们中的一个,但一般只用于一个线程等待该条件变量。
有关的函数和操作定义如下:
#include<pthread.h>
#include<ctype.h>
pthread_mutex_t mutex=PTHREAD_MOTEX_INITIALIZER; /*初始化锁*/
pthread_cond_t cond=PTHREAD_COND_INITIALIZER; /*初始化条件变量*/
pthread_cond_wait(pthread_cond_t*cond,pthread_mutex_t*mutex);
/*等待条件变量cond,开互斥锁mutex*/
pthread_cond_signal(pthread_cond_t*cond); /*通知条件变量cond状态变化*/
选项
答案
实现该功能的C程序为程序清单15-1。 有关的函数和操作定义如下: #include<pthread.h> #include<ctype.h> pthread_mutex_t mutex=PAHREAD_MUAEX_INIAIALIZER;/*初始化锁*/ pthread_cond_t cond=PAHREAD_COND_INIAIALIZER;/*初始化条件变量.*/ pthread_cond_wait(pthread_cond_t*cond,pthread_mutex_t*mutex); /*等待条件变量cond,开互斥锁mutex*/ pthread_cond_signal(pthread_cond_t*cond)j/*通知条件变量cond状态变化*/ 在程序清单15-1的pthread_cond.c中,主线程创建两个线程,线程1一次读入一个字符串,将其存入缓冲区,线程2从缓冲区取出数据,输出打印。主线程先初始化锁变量和条件变量值后,创建了两个线程,线程1通过pthread_cond_wait等待条件变量的变化。当一个线程将字符串存入缓冲区后,线程2将缓冲区中的字符串取出并打印,并用pthread_cond_signal通知线程1条件变量的变化,主线程就可将输入的字符串存人缓冲区,如此循环执行。 程序清单15-1.pthread_cond.C #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<ctype.h> pthread_mutex_t lock=PAHREAD_MUAEX_INIAIALIZER; /*初始化锁后,锁是关闭的*/ pthread_cond_t empty=PAHREAD_COND_INIAIALIZER;/*初始化条件变量l*/ pthread_cond_t full=PAHREAD_COND_INIAIALIZER;/*初始化条件变量2*/ char buf[256]; main() { pthread_t t1,t2;/*两个线程*/ void *put buf(void*);/*线程1执行的输入和存入缓冲区的函数*/ void *get buf(void*);/*线程2执行的从缓冲区读出和打印的函数*/ pthread_mutex_lock(&lock);/*先关闭锁,封锁对buf的访问*/ pthread_cond signal(&empty); pthread_create(&t1,NULL,put_buf1);/*创建线程1*/ pthread_create(&t2,NULL,get_buf);/*创建线程2*/ pthread_join(t1,NULL);/*等待子线程1结束*/ pthread_join(t2,NULL);/*等待子线程2结束*/ } void*put_buf()/*线程并发执行的函数1*/ { while(1){ pthread_cond_wait(&empty,&lock); /*等待条件变量状态变化(等待旗帜empty"升起"),开锁*/ printf("empty flag was raised,I have the lock\n"); /*条件变量已变化(旗帜empty已"升起"),获得了锁(锁已开)*/ pthread_mutex_lock(&lock);/*关锁,竞争buf*/ printf("pthreal:input string\n"); gets(buf);/*读入,存入缓冲区*/ pthread_mutex_unlock(&lock); pthread_cond_signal(&full);/*升起条件变量旗帜,通知线程2*/ /*升起旗帜,通知线程2,可再在buf存放结果*/ } } void*get_buf()/*线程并发执行的函数2*/ { sleep(2); while(1); pthread_cond_wait(&full,&lock); /*等待条件变量状态变化(等待旗帜full"升起"),开锁*/ printf("full flag was raised,I have the lock\n"); /*条件变量已变化(旗帜full已"升起"),获得了锁(锁已开)*/ pthread_mutex_lock(&lock);/*关锁,竞争buf*/ printf("thread2 output:%s\n",buf);/*从缓冲区取出,打印*/ pthread_cond_signal(&empty);/*升起条件变量旗帜,通知线程1*/ } }。
解析
转载请注明原文地址:https://kaotiyun.com/show/AYNx777K
本试题收录于:
操作系统题库理工类分类
0
操作系统
理工类
相关试题推荐
下列属于常见的风险分析的方法是()
根据《工程建设项目招标范围和规模标准》的规定,属于必须招标的工程建设项目范围的工程建设项目,勘察、设计、监理等服务的采购,单项合同估算价在________万元人民币以上的,必须进行招标。()
攻击者利用___________漏洞,无须登录即可对系统发起拒绝服务攻击,使系统或相关的应用程序崩溃或失去响应能力。()
恶意代码的隐藏技术通常包括本地隐藏和____________。
加密主要是为了隐蔽信息的内容,而认证的三个主要目的是:消息完整性认证、___________消息的序号和操作时间认证。
某决策问题,面临O1、O2、O3、O4四个状态,有A1、A2、A3三个方案可供选择,其支付费用表如下表:试分别完成以下问题:(1)用乐观法决策。(2)用悲观法决策。(3)用最小最大遗憾值法决策。
f(Ai,θj)在方案Ai在状态θj下的收益值,用最大最小原则的决策思路可表述为()
进程从运行态转为就绪态,可能的原因是()
设有m个进程共用一个相同的程序段(临界区),若每次最多允许n个进程(n<m)同时进入临界区,则信号量的初始值应为()
研究信号频谱的意义是什么?
随机试题
患者男性,43岁,体检发现AFP>500μg/L,肝、肾功能正常。有HbsAg阳性史6年。最可能的诊断是
项目选址应考虑的因素有()。
中压A地下燃气管道与直埋电力电缆的水平净距不得小于()。
A公司为建造厂房于2×21年1月1日从银行借入6000万元专门借款,借款期限为2年,年利率为6%,2×21年1月1日,A公司采取出包方式委托B公司为其建造该厂房,并预付了3000万元工程款,厂房实体建造工作于当日开始,2×21年9月1日,支付2000
如果缺货引起的延期交货成本低于节约的库存成本,那么这种方案是可取的,它可以实现企业总成本最低的目标。
某小区物业征集业主意见,计划从100,户主中抽取20户进行调查。10,户业主中有b户户主年龄超过60岁,a户户主年龄不满35岁,户主年龄在36岁到59岁的有25户。为了使意见更具代表性,物业采取分层抽样的方法,从b户中抽取了4户,则a的值可能是()
(2014年·湖南)德育过程中的活动和交往不同于社交。()
在大型游乐公园里,现场表演是刻意用来引导人群流动的:午餐时间的表演是为了减轻公园餐馆的压力,傍晚时间的表演则有一个完全不同的目的——吸引参观者留下来吃晚餐。表面上不同时间的表演有不同的目的,但这背后却有一个统一的潜在目标,即______。以下哪一选项作为本
在垄断资本主义产生的过程中,生产集中是指
A.Nuclearreactionsasthelastingsourceofthesun’senergy.B.Themostimportantsourceofenergy.C.Typesofelectromagne
最新回复
(
0
)