版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简述用户级线程和内核级线程之间的映射模型有哪些,并分别加以说明:1.多对一模型1)多对一模型把多个用户级线程映射到一个内核级线程。2)线程的管理在用户空间实现,所以效率高。3)当一个线程因调用系统调用被阻塞时,整个进程被阻塞。2.一对一模型1)一对一模型把每个用户级线程影射到一个内核级线程。2)当一个线程阻塞时,其他线程仍然可以运行。3.多对多模型1)多对多模型将m个用户级线程影射到n个内核级线程,m≥n。2)用户可以创立所需要的用户级线程,通过分配适当数目的内核级线程获得并发执行的优势并节省系统资源。二、简述以下Windows多线程程序设计中常用函数的含义ResumeThread();被挂起线程的恢复运行TerminateThread();
终止线程运行InitializeCriticalSection();
初始化线程临界区CreateMutex();
创立线程互斥量CreateEvent();创立线程事件三、简述以下Linux多线程程序设计中常用函数的含义pthread_create();
创立线程pthread_join();
线程阻塞〔同步〕pthread_attr_init();
线程属性初始化pthread_cancel();
线程取消sem_getvalue();获得线程信号量值四、常用的并行程序性能优化技术有哪些?减少通信量,提高通信粒度全局通信尽量利用高效集合通信算法挖掘算法的并行度,减少CPU空闲等待负载平衡通信,计算的重叠通过引入重复计算来减少通信,即以计算换通信五、简述多线程机制的优点.创立一个线程比创立一个进程的代价要小线程的切换比进程间的切换代价小充分利用多处理器数据共享快速响应特性可以是程序更加模块化,减少程序逻辑六、什么是线程、进程,它们之间的关系是什么?答:进程是一组离散的(执行)程序任务集合;线程是进程上下文中执行的代码序列,又被称为轻量级进程。进程中可包含一个或多个线程。七、由于线程共享同一进程的内存空间,多个线程可能需要同时访问同一个数据,如果没有正确的保护措施,对共享数据的访问会造成数据的不一致和错误。简述Windows环境下常用的全局变量、事件和临界区三种同步机制。答:进程中的所有线程均可以访问所有的全局变量,各线程根据全局变量的状态来决定是否运行相应的线程函数,它是Win32多线程同步的最简单方式。事件是WIN32提供的最灵活的线程间同步方式,各线程根据事件的激发状态来决定是否运行相应的线程函数。临界区是一种防止多个线程同时执行一个特定代码段的机制,适用于多个线程操作之间没有先后顺序但要求互斥的同步。多个线程访问同一个临界区的原那么:一次最多只能一个线程停留在临界区内;不能让一个线程无限地停留在临界区内,否那么其他线程将不能进入该临界区。八、衡量处理器性能的主要指标是什么,并以此说明多核处理器产生的原因:衡量处理器性能的主要指标是每个时钟周期内可以执行的指令数(IPC:InstructionPerClock)和处理器的主频。因此,提高处理器性能就是两个途径:提高主频和提高每个时钟周期内执行的指令数(IPC)。而通过改进架构来提高IPC的幅度是非常有限的,所以在单核处理器时代只能通过提高(处理器的)主频来提高性能,由于处理器功耗正比于主频的三次方,所以给处理器提高主频不是没有止境的。而将单核处理器增加到双核处理器,如果主频不变的话,IPC理论上可以提高一倍。所以为了到达更高的性能,在采用相同微架构的情况下,可以增加处理器的内核数量同时维持较低的主频。〔这样设计的效果是,更多的并行提高IPC,较低的主频有效地控制了功耗的上升〕九、请分别说明OpenMP指导语句#pragmaompparallel,#pragmaompparallelfor和#pragmaompparallelprivate的含义和作用。答:#pragmaompparallel区域并行性指导语句,说明后续语句按多线程方式运行;#pragmaompparallelfor循环并行化指导语句,说明后续for循环语句按多线程方式运行;#pragmaompparallelprivate并行区变量私有化指导语句,说明后续语句中的某变量在多线程方式运行时被各线程私有化,每次仅容许一个线程访问该变量。十、阐述超线程技术和多核架构在并行计算应用领域上的区别和联系:区别:超线程技术是通过延迟隐藏的方法提高了处理器的性能,本质上,就是多个线程共享一个处理核。因此,采用超线程技术所获得的性能并不是真正意义上的并行,从而采用超线程技术多获得的性能提升将会随着应用程序以及硬件平台的不同而参差不齐。多核处理器是将两个甚至更多的独立执行核嵌入到一个处理器内部。每个指令序列〔线程〕,都具有一个完整的硬件执行环境,所以,各线程之间就实现了真正意义上的并行。联系:超线程技术:充分利用空闲CPU资源,在相同时间内完成更多工作。与多核技术相结合:给应用程序带来更大的优化空间,进而极大地提高系统的吞吐率。十一、简述程序员在申请互斥资源时防止产生死锁现象的三种程序设计方案:1)线程以相同的次序进行加锁。2)使用非阻塞的加锁操作。3)(由于调度可能造成某些线程长时间等待,这时可以再线程释放锁之后)通过调用yield后者类似功能的库函数或系统调用放弃cpu以便其他进程被投入执行并获得锁。十二、简述如何衡量“锁〞的粒度,“锁〞的粒度与数据并行性之间的关系:锁的粒度是上锁后保护的共享数据的多少。减小锁的粒度可以提高对共享数据访问的并行性。编程题:计算圆周率Pi值〔蒙特卡洛法或其它方法〕DoublePI(DOWRDdwCount){Doublem=0;For(doublen=0;n<dwCount;n++){Doublex=random(1);Doubley=random(1);If((x*x+y*y)<=1){M++;}}Doubles=m/dwCount;PI=4*s;Return(PI);}第1章:多核技术导论习题1.全世界第一台全自动电子数字计算机ENIAC于哪一年研制成功?〔B〕A.1944年B.1945年C.1946年D.1947年2.计算机的硬件工艺开展顺序是:〔A〕A.电子管数字计算机、晶体管数字计算机、集成电路数字计算机、大规模集成电路数字计算机B.晶体管数字计算机、电子管数字计算机、集成电路数字计算机、大规模集成电路数字计算机C.电子管数字计算机、集成电路数字计算机、大规模集成电路数字计算机、晶体管数字计算机D.电子管数字计算机、集成电路数字计算机、晶体管数字计算机、大规模集成电路数字计算机3.下面关于Intel8086芯片于8088芯片的描述,不正确的选项是:〔D〕A.8086是第一个16位的微处理器。B.8088是第一个16位的微处理器。C.8086每周期能传送或接收16位数据D.8088每周期能传送或接收16位数据4.针对内存的速度瓶颈,英特尔为80386设计了_______来解决这个速度瓶颈:〔B〕A.虚拟86B.高速缓存〔Cache〕C.浮点运算单元D.多媒体扩展指令集5.为了提高电脑在多媒体、3D图形方面的应用能力,产生了许多新指令集,以下不属于这类指令集的是:〔C〕A.MMXB.SSEC.浮点运算集D.3DNOW!6.以下关于超线程技术的描述,不正确的选项是:〔D〕A.利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。B.采用超线程技术可在同一时间里,使应用程序能够使用芯片的不同局部。C.超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。D.是一种多核技术,揭开x86处理器多核心时代。7.总线共享Cache结构的缺点是:〔C〕A.结构简单B.通信速度高C.总线的结构可扩展性较差D.以上都是8.为什么说从单核到多核的转变成为不可防止的历史趋势:〔D〕A.指令级并行的局限B.能耗与散热C.内存墙问题D.以上都是9.从数据处理的角度看,不存在并行性的是:〔A〕A.字串位串B.字串位并C.字并位串D.字并位并10.阵列处理机又称为并行处理机,它的体系结构属于_______计算机。〔B〕A.SISDB.SIMDC.MIMDD.MISD11.多处理机实现_______级的并行。〔B〕A.指令内部B.指令C.任务或过程D.作业或程序12.主存储器和CPU之间增加cache的目的是:〔A〕A.解决CPU和主存之间的速度匹配问题B.扩大CPU中通用存放器的数量C.扩大主存储器的容量D.既扩大主存储器的容量又扩大CPU中通用存放器的数量13.存储周期是:〔C〕A.存储器的读出时间B.存储器的写入时间C.存储器进行连续读和写操作所允许的最短时间间隔D.存储器进行连续写操作所允许的最短时间间隔14.交叉存储器实际上是一种_____存储器,它能_____执行______独立的读写操作。〔A〕A.模块式,并行,多个B.模块式,串行,多个C.整体式,并行,一个D.整体式,串行,多个15.提高微处理器性能的途径有哪些。〔D〕A.提高芯片内部时钟的工作频率B.增加芯片数据总线的宽度,提高微处理器与片外传送数据或指令代码的速率,同时片内的数据路径也必然加宽,内部的数据处理速度会加快C.采用能够并行执行指令的微体系结构及其它相关技术D.以上都是16.对于Linux2.6内核的调度算法,以下表述不正确的选项是:〔B〕A.系统为每个处理器都维持一个单独的就绪队列,就绪队列包括活动的就绪队列和扩展的就绪队列B.任务的调度是基于先来先效劳调度的C.当活动就绪队列中的任务全部时间片结束或者等待IO挂起,只要进行简单的指针操作,就可以相互转换活动就绪队列和扩展就绪队列D.实现了负载均衡17.弗林〔Flynn〕根据指令流和数据流的不同组织方式,把计算机系统的结构进行了分类,以下属于弗林分类的是:〔ABCD〕A.单指令流单数据流〔SingleInstructionstreamSingleDatastream--SISD〕B.单指令流多数据流〔SingleInstructionstreamMultipleDatastream--SIMD〕C.多指令流单数据流〔MultipleInstructionstreamSingleDatastream--MISD〕D.多指令流多数据流〔MultipleInstructionstreamMultipleDatastream--MISD〕18.以下哪个不属于SIMD。〔D〕A.并行处理机B.阵列处理机C.向量处理机D.标量流水线处理机19.对于对称多处理器〔SMP〕,以下表述不正确的选项是:〔C〕A.SMP是指在一个计算机上聚集了一组处理器,各处理器之间共享内存子系统以及总线结构。B.一台电脑不再由单个CPU组成,而同时由多个处理器运行操作系统的单一复本,并共享内存和一台计算机的其他资源。C.所有的处理器都可以平等地访问内存、I/O,但对于外部中断,各个处理器有不同的优先权。D.在SMP系统中,系统资源被系统中所有CPU共享,工作负载能够均匀地分配到所有可用处理器之上。20.对于集群计算机,以下表述不正确的选项是:〔C〕A.集群计算机是一种并行或分布式处理系统,由很多连接在一起的独立计算机组成。B.一个集群一般是指连接在一起的两个或多个计算机〔节点〕。节点可以是在一起的,也可以是物理上分散而通过网络连结在一起的。C.一个连接在一起的计算机集群对于用户和应用程序来说是一个一个分布的系统。D.集群计算机是随着微处理器和网络技术的进步而逐渐开展起来的,它主要用来解决大型计算问题。21.对于多核处理器,计算内核相同,地位对等的称为_____;计算内核不同,地位不对等的称为_________。〔B〕A.异构多核,同构多核B.同构多核,异构多核C.都是异构多核D.都是同构多核22.高效的通信机制是CMP处理器高性能的重要保障,目前比拟主流的片上高效通信机制有:〔BC〕A.基于共享存放器的结构B.基于片上的互连结构C.基于总线共享的Cache结构D.基于共享内存的结构23.对于高级编程中断控制器〔APIC〕,以下表述不正确的选项是:〔D〕A.减缓与中断相关的内存总线传输压力,从而使得内存总线可用程度更高B.帮助核之间更好的处理来自别的核的中断C.APIC接收来自处理器中断引脚的来自内部或外部I/OAPIC的中断,然后将这些中断发送过处理器核处理D.在多核处理器系统中,APIC不能够接受发送核内中断〔Interprocessorinterrupt即IPI〕消息24.基于片上互连的结构的优点是:〔AB〕A.可扩展性好B.数据带宽有保证C.硬件结构复杂D.软件改动较大25.对于Cell的编程标准,以下表述不正确的选项是:(D)A.要求程序员对每个核进行单独的编程B.通过特殊的编译器和链接器得到二进制代码C.PPE和SPE是不同的编程模式D.PPE和SPE是相同的编程模式第2章:多线程并行程序性能分析方法综述习题1.性能调优周期螺旋式上升的5个主要阶段依次是:〔A〕A.获取性能数据->分析数据,定位性能瓶颈所在->考虑解决问题的可能途径与方法->实现解决方案->重测试B.获取性能数据->考虑解决问题的可能途径与方法->分析数据,定位性能瓶颈所在->实现解决方案->重测试C.考虑解决问题的可能途径与方法->实现解决方案->重测试->获取性能数据->分析数据,定位性能瓶颈所在D.考虑解决问题的可能途径与方法->实现解决方案->获取性能数据->分析数据,定位性能瓶颈所在->重测试2.需要被性能调优的程序必须处在开发的适当阶段并且必须具备如下特性:〔ABC〕A.程序必须是稳定的B.程序必须是有代表性的C.程序必须使用了最新的技术D.对任何可能影响程序性能的代码都必须优化3.为了搜集性能数据,一个好的测试数据集是必不可少的。一个好的测试数据集需要具备哪些特点?〔ABCD〕A.可衡量性B.可重复性C.静态的D.有代表性4.对于Amdahl定律,以下表述不正确的选项是:〔A〕A.对程序的可优化局部进行最高限度的性能改进就能不断地提高程序的整体性能B.程序可能到达的加速上限为1/fC.如果要使得程序获得更高的性能,就要对程序中更大的局部进行性能调优D.程序的性能受限于程序中性能最差的局部5.性能调优工作包括了:〔ABCD〕A.改进系统平台的资源利用率B.提高有效性,减少延迟C.增加并发度D.改进吞吐量,减少可能的性能瓶颈6.对一个具体的问题做性能优化时,可以同时在这多个层次上考虑可能的优化手段,一般说来:〔AB〕A.在越高的层次上进行优化,可能获得的效益越高B.在越低的层次上进行优化工作那么相对越容易实现C.在越高的层次上进行优化,可能获得的效益越低D.在越低的层次上进行优化工作那么相对越难于实现7.VTune性能分析器中的取样功能有哪几种方式?〔AC〕A.基于时间取样B.随机取样C.基于事件取样D.线性取样8.Intel调优助手能够给我们自动推荐代码改进方法,主要有以下哪些方面?〔BCD〕A.算法自动改进B.处理器瓶颈以及改进C.取样向导增强D.超线程9.对于Vtune的兼容性,以下表述不正确的选项是:〔B〕A.支持最新的Intel处理器B.不支持LinuxC.支持Windows命令行D.支持最常用的编程语言10.MKL数学核心库的功能领域包括以下哪些?〔D〕A.离散傅立叶变换,ScaLAPACK软件包B.矢量数学库,矢量统计库C.PARDISO稀疏矩阵解算器,线性代数D.以上都是11.关于Intel(R)线程检查器,以下表述不正确的选项是:〔D〕A.监控程序执行过程中的线程行为B.发现其中存在的竞争现象、线程阻塞以及潜在的线程死锁问题C.提示同线程错误相关的源代码位置、侵权变量以及堆栈跟踪D.可以快速查找但不能修复Windows和OpenMP*线程软件中的bug12.以下哪个问题不能用Intel(R)线程检查器检测出来?〔D〕A.数据竞争B.线程死锁C.阻塞问题D.逻辑错误13.对于Intel(R)线程档案器,以下表述不正确的选项是:〔A〕A.只能帮助调整Win32*线程化软件的性能B.通过监控程序的运行来检测线程性能的相关问题,包括线程过载和同步冲突,能够帮助查找负载平衡,同步开销等线程性能问题C.进行关键路径分析D.提供图形式的检测结果,可以快速查明影响程序运行时间的代码位置14.Intel(R)线程档案器为Win32提供了哪些功能?〔C〕A.Win32线程关键路径分析,跟踪显示性能瓶颈B.通过Win32*线程API对软件线程化后的性能分析C.可与任何Windows平台上的IDE集成D.如果不用Win32库,可以支持用户定义的同步原件15.Intel(R)线程档案器为OpenMP提供了哪些功能?〔D〕A.并行代码和顺序代码的时间花费B.线程任务量不均衡C.并行过载和顺序过载D.以上都是16.提高微处理器内部执行的并行性有哪些措施。〔C〕A.采用超级流水线技术B.采用超标量技术C.以上都是D.以上都不是17.性能调优工作________知道什么时候结束调优,在开始性能调优工作之前,你_____对整个程序进行一个基准测试以获知程序的理论峰值。〔B〕A.需要,不需要B.需要,必须C.不需要,不需要D.不需要,必须18.Jackson优化定律是指:〔C〕A.不要进行优化B.除非你已经有了一个相当清晰可靠的非优化版本的实现,否那么你不要试图对程序进行优化C.以上两条都是D.以上两条都不是19.根据80/20定律,_____%的执行时间消耗在_____%的代码上。〔C〕A.80,80B.20,20C.80,20D.20,8020.多处理能力带来的最大好处是能够改进______,一个多线程程序的运行需要____个单处理器系统。〔B〕A.吞吐量,多B.吞吐量,一C.频率,多D.频率,一21.决定延迟最重要的两个因素是__________以及_________。〔D〕A.内存存取时间,处理器频率B.I/O时间,处理器频率C.I/O时间,总线带宽D.内存存取时间,I/O时间22.并发性既可以指对单个程序使用______处理,也可以指对多个程序使用____处理。〔A〕A.多任务,多任务B.多任务,单任务C.单任务,多任务D.单任务,单任务23.对于IntelVTune性能分析器,以下表述正确的选项是:〔D〕A.可以在程序运行的系统平台上自动搜集性能数据B.可以将所获得的性能数据在各个不同的层次,大至系统层,下至程序源代码级,甚至到处理器指令级,进行不同粒度的交互式可视化,帮助查找可能的性能瓶颈,并提供可能的解决方案C.VTune既可以在本地、也可以远程搜集性能数据,并在本地进行数据处理、分析以及显示D.以上都正确24.对于Intel(R)线程检查器,以下表述不正确的选项是:〔C〕A.Intel(R)线程检查器监控程序执行过程中的线程行为,发现其中存在的线程阻塞以及潜在的线程死锁问题B.提示同线程错误相关的源代码位置、侵权变量以及堆栈跟踪等C.不能从Windows主机系统分析Linux系统中运行的线程代码D.Intel线程检查器可以发现数据竞争现象第3章:Intel多核处理器上的性能调优方法习题1.独立于体系结构性能优化方法主要有:〔BCD〕A.编写适用于特定CPU的优化代码B.防止冗余的函数调用C.防止不必要的边界检查D.利用局部变量保存中间计算结果2.以下不是阻碍优化的因素有:〔D〕A.编译优化选项B.变量别名C.函数调用的边际效应D.源文件的大小3.使用-O3编译选项所得的程序,执行效率比使用-O2编译选项所得的程序_______。〔D〕A.高B.低C.一样D.不一定4.对于函数调用的边际效应,以下表述不正确的选项是:〔B〕A.只要函数在调用的过程中改变了某些全局变量的值,我们就称函数调用中有边际效应。B.存在边际效应的函数调用,其调用次数的不同会对整个程序的行为产生不同的影响。C.为了防止函数调用的边际效应,就必须尽量防止使用全局变量,尽量使用局部变量。D.编译器无法检测出函数调用中是否会产生边际效应,所以应该将函数调用移出循环体外。5.对于一个优化的编译器,以下表述不正确的选项是:〔D〕A.编译器负责其中的存放器分配的优化B.编译器负责其中的代码选择及有限重组的优化C.编译器进行一些局部范围内的优化D.优化的编译器能够改进算法的计算复杂度6.对于现代微处理器体系结构而言,对性能优化影响比拟大的主要是:〔ACD〕A.超标量B.扩展指令集C.乱序执行D.指令流水线的深度7.对于通过加深流水线的深度的方法来提升时钟频率,从而提高整个处理器性能的做法,以下表述正确的选项是:〔AC〕A.如果指令流是完全规那么的顺序执行,那么程序的性能会非常高B.对于指令跳转、条件转移指令,流水线也有很好的性能C.单一的以时钟频率作为划分处理器性能的标志也有利于市场化的宣传D.对于错误的条件转移预测,深度流水线能够更快地从错误中恢复8.关于CISC,以下表述不正确的选项是:〔D〕A.CISC的全称是ComplexInstructionSetComputerB.在CISC微处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的C.顺序执行的优点是控制简单,但计算机各局部的利用率不高,执行速度慢D.其代表产品是Intel生产的x86系列CPU及其兼容CPU以及MIPS处理器9.关于RISC,以下表述不正确的选项是:〔B〕A.RISC的全称是ReducedInstructionSetComputingB.CISC是在RISC指令系统根底上开展起来的C.RISC的指令格式统一,种类比拟少,寻址方式也比复杂指令集少D.RISC型CPU与Intel和AMD的CPU在软件和硬件上都不兼容10.以下表述不正确的选项是:〔C〕A.超标量是通过内置多条流水线来同时执行多个处理器,其实质是以空间换取时间。B.超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。C.将流水线设计的步(级)越长,其完成一条指令的速度越慢D.流水线过长也带来了一定副作用,很可能会出现主频较高的CPU实际运算速度较低的现象11.对于乱序执行,以下表述不正确的选项是:〔C〕A.乱序执行是指CPU允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术B.采用乱序执行技术的目的是为了使CPU内部电路满负荷运转并相应提高了CPU的运行程序的速度C.乱序执行的指令没有任何规定的顺序D.指令进行运算时需要等待结果,一般无条件分枝只需要按指令顺序执行,而条件分枝必须根据处理后的结果,再决定是否按原先顺序进行12.以下表述不正确的选项是:〔C〕A.编译时的选项-O2就是二级优化,-O是一般优化,-O0是不优化B.二级优化是编译器在一般优化根底上再做第二次优化C.越高级的优化,生成的可执行文件的执行效率可以更高,但是,编译、连接的速度就相应地要慢一些D.更高级的优化可能导致计算结果不正确13.以下表述不正确的选项是:〔AD〕A.Intel宽度动态执行技术包括了16级的有效流水线,具有更宽的解码带宽,更强的指令跳转预测,更宽的执行路径,全面支持64-bitB.Intel高级内存存取技术改进了转移预测机制,高级数据预取机制C.Intel高级智能缓存技术使得cache可以在双核之间共享,而且双核对于整个cache都具有完全存取权限D.Intel高级数字媒体促进技术中高带宽SSE技术,每周期可执行16个单精度浮点操作或者8个双精度浮点操作14.对于Intel处理器的优化技术,以下表述不正确的选项是:〔CD〕A.指令队列中包括了一个循环检测器,防止了将循环体中的指令重复解码,提高了指令流执行带宽B.取指和预解码的优化措施主要影响的是那些带有立即数或者直接偏移的指令,包括操作数大小重载前缀〔OperandSizeOverride(66H)〕以及地址大小重载前缀〔AddressSizeOverride(67H)〕C.解码器每个时钟周期至多可产生8条微操作D.以上都正确15.一个优化的编译器一般来说______改进算法的计算复杂度,编译器能进行____因子的改进。〔D〕A.可以,指数B.可以,常数C.不能,指数D.不能,常数16.编译器保证在任何极端的情况下__________都不能发生任何改变。〔D〕A.程序的行为B.程序的全局状态C.程序的全局变量的值D.以上都是17.编译器所能作的优化一般是哪些类型的优化。〔AB〕A.函数/过程调用内部B.过程间C.全局范围的优化D.以上都是18.对于通过提升时钟频率来提高性能的方法来说,以下哪个是致命的问题。〔C〕A.能量消耗B.能量泄露C.这两个都是D.这两个都不是19.随着时钟频率的上升,当超过某个阈值的时候,处理器的能量消耗________。〔A〕A.成指数上升趋势B.成线性上升趋势C.不变D.成线性下降趋势20.Intel处理器的优化技术中,每个时钟周期至多可以有____条微操作同时被发射到执行核心。〔C〕A.4B.5C.6D.7第4章:多线程编程方法综述习题1.以下表述正确的选项是:〔BD〕A.通过提高时钟频率来太提升性能的方法始终有效B.单个芯片上可以集成的引脚〔pin〕数目以及带宽限制使处理器与内存性能之间的差异越来越大C.每当出现一代新的体系结构平台,原有的程序无需修改,或者只需很少的修改,就可以轻而易举的获得由摩尔定律所带来的性能提D.使用多线程技术,充分利用单个芯片上的多个计算核心,可以提高程序整体的计算吞吐量2.对于进程,以下表述不正确的选项是:〔D〕A.进程是指程序在一个数据集合上运行的过程B.进程是系统进行资源分配和调度运行的一个独立单位C.在操作系统中引入进程的目的,是为了使多个程序并发执行,以改善资源利用率及提高系统的吞吐量D.在操作系统中引入进程的目的,是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性3.对于线程,以下表述不正确的选项是:〔C〕A.线程是进程中的一个实体,是被系统调度和分配的根本单元B.每个程序至少包含一个线程,那就是主线程C.线程自己只拥有很少的系统资源,且不可与同属一个进程的其他线程共享所属进程所拥有的全部资源D.同一进程中的多个线程之间可以并发执行,从而更好地改善了系统资源的利用率4.以下表述不正确的选项是:〔C〕A.人们习惯上称线程为轻量级进程〔lightweightprocess,LWP〕,线程是CPU调度和分派的根本单元B.在创立或撤消进程时,系统都要为之分配或回收资源C.进程切换的开销也远小于线程切换的开销D.线程切换只需保存和设置少量存放器的内容,并不涉及存储器管理方面的操作5.以下表述不正确的选项是:〔D〕A.在传统的操作系统中,CPU调度和分派的根本单位是进程B.在引入线程的操作系统中,那么把线程作为CPU调度和分派的根本单位C.同一进程中线程的切换不会引起进程切换,从而防止了昂贵的系统调用D.由一个进程中的线程切换到另一进程中的线程时,也不会引起进程切换6.以下表述正确的选项是:〔AC〕A.在引入线程的操作系统中,进程之间可以并发执行B.在引入线程的操作系统中,一个进程中的多个线程之间不可以并发执行C.进程是拥有系统资源的一个独立单位,它可以拥有自己的资源D.线程是拥有系统资源的一个独立单位,它可以拥有自己的资源7.以下表述不正确的选项是:〔A〕A.用户级线程在用户层通过线程库来实现。对它的创立、撤销和切换都要利用系统的调用。B.核心级线程由操作系统直接支持,即无论是在用户进程中的线程,还是系统进程中的线程,它们的创立、撤消和切换都由核心实现C.硬件线程就是线程在硬件执行资源上的表现形式D.用户级线程通过操作系统被作为核心级线程实现,再通过硬件相应的接口作为硬件线程来执行8.以下表述不正确的选项是:〔B〕A.对用户级线程来讲,内核也并不知道它的存在,所以所有对用户级线程的管理和调度都是在用户空间来进行的B.用户级线程的切换需要通过中断进入操作系统的内核C.如果内核是单线程的,那么任何一个用户级线程假设执行了阻塞系统调用就会导致该线程所属的进程阻塞D.如果采用的是内核级线程,当一个线程被阻塞,该进程中的线程不会被阻塞。9.对于线程生命周期,以下表述正确的选项是:〔D〕A.系统中的每个线程都有一个从创立到消亡的过程,我们把这一过程称作该线程的生命周期。B.线程生命周期包括创立、就绪状态、运行状态、等待状态和消亡C.就绪状态的线程运行所需的一切条件都得到满足,已获得必要的资源和设备。但因处理器资源个数少于线程个数,所以该线程不能运行,而必须位于队列中等待分配处理器资源D.以上都正确10.以下表述不正确的选项是:〔C〕A.当两个或多个进程试图在同一时刻访问共享内存,或读写某些共享数据,就会产生竞争条件B.每个临界区都有相应的进入区〔entrysection〕和退出区〔exitsection〕C.可能有两个线程同时进入临界区D.临界区的存在就是为了保证当有一个线程在临界区内执行的时候,不能有其他任何进程被允许在临界区执行11.对于信号量,以下表述不正确的选项是:〔B〕A.信号量有两个根本的原子操作:P〔wait,检测操作〕和V〔signal,增量操作〕。B.信号量在并行进程开始执行前,信号量被初始化负数。C.信号量为正表示可无阻塞执行的线程的数目,为负那么表示已经被阻塞的线程数。D.当信号量为0时那么表示没有等待的线程12.对于锁,以下表述不正确的选项是:〔D〕A.锁类似于信号量,不同之处在于在同一时刻只能使用一个锁B.锁有两个操作,分别是获取锁和释放锁。C.互斥量是一种锁,线程对共享资源进行访问之前必须先获得锁;否那么线程将保持等待状态,直到该锁可用。D.假设线程不主动放弃锁,其他线程可以抢占它13.对于条件变量,以下表述正确的选项是:〔ABC〕A.条件变量(Conditionvariable)是用来通知共享数据状态信息的B.当特定条件满足时,线程等待或者唤醒其他合作线程C.条件变量需要一个互斥量来同步对共享数据的访问D.条件变量提供互斥14.对于线程局部存储TLS(threadlocalstorage),以下表述正确的选项是:〔ABCD〕A.解决多线程中的对同一变量的访问冲突的一种技术B.TLS会为每一个线程维护一个和该线程绑定的变量的副本C.每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了D.Java平台的java.lang.ThreadLocal是TLS技术的一种实现15.以下表述不正确的选项是:〔D〕A.在普通的同步机制中,是通过对象加锁来实现多个线程对同一变量的平安访问的B.ThreadLocal会为每一个线程维护一个和该线程绑定的变量的副本,从而隔离了多个线程的数据,每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。C.ThreadLocal提供了线程平安的共享对象,在编写多线程代码时,可以把不平安的整个变量封装进ThreadLocal,或者把该对象的特定于线程的状态封装进ThreadLocalD.使用ThreadLocal的多个线程也会共享资源16.对于客户/效劳器模型中,以下表述正确的选项是:〔ABCD〕A.线程编程流水线模型中,“数据元素〞流串行地被一组线程顺序处理。每个线程依次在该数据上执行自身特定的操作,并将执行结果传递给流水线中的下一个线程。B.线程编程工作组模型中,数据由一组线程独立地处理C.线程编程客户/效劳器模型中,客户请求效劳器对一组数据执行某个操作D.线程编程客户/效劳器模型中,效劳器独立的执行操作–客户端或者等待效劳器执行,或者并行地执行并在后面需要时查找结果17.以下表述不正确的选项是:〔A〕A.多核CPU机器上的编程和多CPU上的编程应该差不多,只要借鉴以前的多任务编程、并行编程和并行算法方面的经验就足够了B.多核CPU中,要很好地发挥出多个CPU的性能的话,必须保证分配到各个CPU上的任务有一个很好的负载平衡C.要实现一个好的负载平衡通常有两种方案,一种是静态负载平衡,另外一种是动态负载平衡D.PC上的客户端软件要想发挥出多核的并行优势并不像进行大型并行计算的特定领域那样简单18.对于负载平衡,以下表述不正确的选项是:〔C〕A.静态负载平衡需要人工将程序分割成多个可并行执行的局部,并且要保证分割成的各个局部能够均衡地分布到各个CPU上运行B.动态负载平衡是在程序的运行过程中来进行任务的分配到达负载平衡的目的C.动态负载平衡中对任务的调度可以由系统来实现,也可以由程序员修改调度策略D.由于实际任务中存在很多的不确定因素,调度算法无法做得很优,因此动态负载平衡有时可能达不到既定的负载平衡要求19.对于负载平衡,以下表述正确的选项是:〔C〕A.使用负载平衡,随着CPU核数的增多总能让总的执行时间下降,从而使加速系数随CPU核数的增加而增加B.负载平衡的困难之处在于程序中的可并行执行块很多要靠程序员来划分,随着核数的增加,这项任务将会变得不可能C.负载划分的误差并不会会随着CPU核数的增加而放大D.负载划分的难题还表达在CPU和软件的升级上20.对于如何解决串行化方面的难题,以下表述正确的选项是:〔ABC〕A.少用锁,甚至采用无锁编程B.使用原子操作来替代锁C.从设计和算法层面来缩小串行化所占的比例D.设计并行指令21.在操作系统中引入进程的目的是:〔A〕A.提高系统吞吐量B.减少程序并发执行时所付出的时空开销C.便于组织程序逻辑D.以上都正确22.在操作系统中引入线程的目的是:〔B〕A.提高系统吞吐量B.减少程序并发执行时所付出的时空开销C.便于组织程序逻辑D.以上都正确23.______是CPU调度和分派的根本单位,______是资源拥有的根本单位。〔D〕A.线程,线程B.进程,线程C.进程,进程D.线程,进程24.线程在不同的操作系统中还有不同的实现方式有:〔D〕A.用户级线程B.核心级线程C.硬件线程D.以上都是25.同一进程的两个线程_____访问对方的虚拟地址空间,不同进程的两个线程______访问对方的虚拟地址空间。〔C〕A.可以,可以B.不可以,不可以C.可以,不可以D.不可以,可以第5章:多线程程序设计中的常见问题及解决途径习题1.以下表述不正确的选项是:〔A〕A.使用多线程能够提升程序的性能,如果少量的线程能够提升程序的性能,那么更多的线程能够更好B.过多的线程可能会严重影响程序的性能C.将给定的工作量划分给过多的线程会造成每个线程的工作量过少,因此可能导致线程启动和终止时的开销比程序实际工作的开销还要多D.过多并发线程的存在将导致共享有限硬件资源的开销增大2.以下表述不正确的选项是:〔A〕A.进程是操作系统分配处理器时间的根本单元B.线程上下文包括为使线程在线程的宿主进程地址空间中无缝地继续执行所需的所有信息C.当软件线程个数超过硬件线程个数的时候,支持抢占式多任务处理的操作系统一般会采用时间片轮转调度的方案D.时间片的长度取决于操作系统和处理器。由于每个时间片都很小,因此即使只有一个处理器,多个线程看起来似乎也是在同时执行3.对于进程间切换,以下表述不正确的选项是:〔C〕A.在系统要进行进程间切换的时候,需要保存当前进程的存放器状态,以便在下次回调到当前线程的时候,能够恢复线程存放器继续运行B.当存在少量线程的时候,进程调度程序会给每一个线程分配足够长的时间片,保存和恢复线程存放器的开销变得不是很显著C.随着线程数目的增加,虽然线程调度程序分给每个线程的时间片也会相应减少,但是不会降低系统性能。D.保存和恢复线程使用的cache的开销那么是更敏感的一种开销4.对于操作系统中的线程,以下表述不正确的选项是:〔D〕A.操作系统中存在两种类型的线程,I/O阻塞线程和计算非阻塞线程B.IO阻塞线程主要用于有交互式的程序中,它在大多数时间内都在等待外部事件C.计算非阻塞线程在大多数时间内都是被调度函数调度到的,应该和处理器资源相匹配D.在处理IO阻塞线程的时候要依次地等待每个请求完成才继续处理下一个请求5.I/O阻塞线程_____引起时间片切换开销,计算非阻塞线程_____引起时间片切换的开销。〔A〕A.不会,会B.会,不会C.都会D.都不会6.以下表述错误的选项是:〔D〕A.OpenMP可以根据目标系统尽量使用最优数量的线程个数B.使用线程池可以防止为每个线程创立新进程的开销C.线程池通常具有最大线程数限制,如果所有线程都繁忙,而额外的任务将放入队列中,直到有线程可用时才能够得到处理D.对于有优先级的线程,也可以使用线程池7.对于可重入函数,以下表述不正确的选项是:〔C〕A.一个可重入的函数在执行中并不使用静态数据,也不返回指向静态数据的指针B.所有使用到的数据都由函数的调用者提供C.可重入函数在函数体内可以调用非可重入函数D.一个非可重入函数通常(尽管不是所有情况下)由它的外部接口和使用方法即可进行判断8.死锁发生必须同时满足以下条件:〔ABCD〕A.互斥B.占有并等待C.非抢占D.循环等待9.以下表述不正确的选项是:〔B〕A.由于多个线程共享资源,在采用基于优先级调度策略时会出现较低优先级的线程先于高优先级线程执行的情况B.优先级倒置可能使实时性要求低的线程错过临界期限(criticaldeadline),从而导致系统崩溃C.要防止出现优先级倒置问题,必须让低优先级线程尽快释放临界资源D.目前解决优先级倒置通常有两种方法,一种是优先级继承〔priorityinheritance〕,另一种是优先级顶置〔priorityceilings〕10.如果一个线程占有资源并申请另一个不能立即分配的资源,那么其现在已分配的资源______。抢占资源分配到_______资源的链表上。〔D〕A.保持不变,当前B.保持不变,所等待C.被抢占,当前D.被抢占,所等待11.以下表述不正确的选项是:〔D〕A.优先级继承技术强令低优先级的线程继承与之共享资源并被挂起的高优先级线程的优先级B.一旦高优先级线程开始挂起,即可实施优先级继承,直到资源释放C.采用优先级继承方法可以有效地解决优先权倒置的问题D.优先级继承方法中动态改变线程的优先级并不对程序性能造成影响12.以下表述不正确的选项是:〔C〕A.优先级顶置方案的目的是让低优先级线程尽快释放临界资源B.优先级顶置方法总是乐于提高线程的优先级,而优先级继承方法那么比拟懒惰,不到万不得已不会提升线程的优先级C.Windows互斥量机制默认支持优先级顶置的方法D.对于使用锁或者忙等待机制的编程人员来说,如果有不同优先级的线程被允许获取锁,就会遇到优先级倒置问题13.以下表述不正确的选项是:〔AD〕A.在遇到锁竞争剧烈的时候,就需要一个更快的锁B.可以通过复制资源的方式来防止使用锁C.减少对锁的等待时间的最有效方法是减少这个锁所保护的范围大小D.向一个散列表中插入数据的时候,使用一个锁对散列加锁和使用散列函数将关键字映射到一个子表,然后线程取得这个子表的锁的效果是一样的14.以下表述不正确的选项是:〔B〕A.如果一个数据结构读取频繁但是写入并不频繁,就可以使用读写锁〔reader-writerlock〕来解决竞争B.一个线程可以同时持有读线程锁和写线程锁C.读线程和写线程将分别排入各自的队列,锁在一组读线程和一个写线程之间交替进行操作D.大多数获取锁的方法都采用超时值。使用超时可以防止应用程序中出现死锁15.非阻塞算法具有以下一些特征:〔ABD〕A.无阻塞B.无锁C.无互斥D.无等待16.以下表述不正确的选项是:〔C〕A.非阻塞算法会导致大量的存储总线流量,因为不同的硬件线程会不断试图对同一cache线进行操作。B.如果将锁竞争分布到多个锁上,并且每个锁都能够保证在其线程完成操作之前没有线程能够访问它所保护的cache线,那么有锁的算法就比等价的非阻塞算法性能好C.有锁算法一定比非阻塞算法好D.使用一个快速的循环锁保护一个不含原子操作的临界段,与需要三个或更多高竞争度原子操作的非阻塞实现方式相比拟而言,性能要好一些17.对用户级线程来讲,内核________它的存在,所以所有对用户级线程的管理和调度都是在________空间来进行的。〔C〕A.知道,用户B.知道,内核C.不知道,用户D.不知道,内核18.以下表述错误的选项是:〔D〕A.对于一个串行程序任一时刻的任一运行副本来说,存储器都有一个良定〔welldefined〕状态B.顺序一致性的存储器要满足每个线程的内部操作顺序是确定不变的且任一线程都可以感知到这些线程同样的操作顺序C.并非所有的线程都要求看到所有的写操作的结果,让他们按照顺序看到写操作的结果更是没有必要D.按照严格操作顺序模型的开销会不会影响应用程序的性能19.关于Itanium体系结构,以下表述不正确的选项是:〔B〕A.Itanium体系结构不需要支持遗留软件,因此可以采用最新的松弛存储器模型B.基于Itanium系统的编译器对volatile的解释方式和传统习惯有很多差异C.Itanium体系结构的两种松弛存储模型经常被使用。第一种机制是消息传递〔messagepassing〕,第二种机制是存储笼〔memorycage〕。D.栅栏的双重检查〔double-check〕机制一般用在多线程代码的惰性初始化〔lazyinitialization〕过程中20.具有不同局部性的存储单元,______放置在同一cache行中,这样_____引发伪共享问题。〔C〕A.可以,会B.可以,不会C.不可以,会D.不可以,不会21.随着软件线程的增多,时间片轮转调度方案开销将会急剧增加,这种开销主要有:〔AB〕A.进程间切换时保存和恢复进程存放器的开销B.在使用时间片机制的时候,保存和恢复线程使用的cache的开销C.调度算法的开销D.以上都是22.看下面代码,线程T1给Total加上val1,线程T2给Total减去val2。变量Total的初始值是200,val1的值是30,val2的值是75。这两个线程的运行顺序可能是。〔D〕A.T1运行结束后运行T2B.T2运行结束后运行T1C.T1和T2交错运行D.以上都有可能23.要防止死锁,最好的方法是:〔A〕A.复制原本需要互斥访问的资源B.按照一定的顺序获取资源〔锁〕,保存一致的锁获取顺序可防止死锁环的出现C.按照地址对锁进行排序D.对已分配的资源不能抢占24.解决优先级倒置通常有:〔AB〕A.优先级继承B.优先级顶置C.优先级反转D.以上都是25.一个资源闲置得越少,要得到它的平均等待时间就越____,这种关系是_____的。〔A〕A.长,非线性B.长,线性C.短,非线性D.短,非线性第6章:Unix/Linux多线程编程习题1.选择正确的代码:〔B〕pthread_tmytid;if(__________(___________,mytid)){printf("MythreadIDmatchmytid\n");}A.equals,pthread_self()B.pthread_equal,pthread_self()C.equals,this()D.pthread_equal,this()2.选择正确的代码:〔B〕void*dosomething(void*arg);interror;intfd;pthread_ttid;if((fd=open("my.dat",O_RDONLY))==-1){perror("failedtoopenmy.dat");}elseif(error=_________(_______,NULL,dosomething,_______)){fprintf(stderr,"failedtocreatethread");}elseprintf("threadcreated");A.pthread_create,&fd,&tidB.pthread_create,&tid,&fdC.create,&fd,&tidD.create,&tid,&fd3.补充以下代码,使得当detachfun作为线程执行时,它会自己别离出去:〔A〕void*detachfun(void*arg){inti=*((int*)(arg));if(!pthread_detach(pthread_self()))returnNULL;fprintf(stderr,"Myargumentis%d\n",i);returnNULL;}A.!pthread_detach,pthread_self()B.pthread_detach,pthread_self()C.!pthread_detach,空D.pthread_detach,空4.当另一个线程用终止线程的ID的值作为第一个参数调用pthread_join之前,未别离线程的资源____被释放。Pthread_join函数将调用线程刮起,直到第一个参数指定的目标线程___。〔C〕A.会,终止B.会,开始运行C.不会,终止D.不会,开始运行5.下面这条语句,Pthread_join(pthread_self());〔BC〕A.没有任何问题B.如果线程是可接合的,这条语句会造成死锁C.有些实现可以检测到死锁,并迫使pthread_join带着错误EDEADLK返回D.将会返回EINVAL错误6.调用exit会使____进程终止;调用pthread_exit会使____进程终止。〔B〕A.整个,整个B.整个,调用C.调用,调用D.调用,整个7.如果多个线程同时执行函数的多个活动请求而不会相互干扰,那么这个函数是____,如果会相互干扰,那么这个函数是_____。〔A〕A.线程平安,非线程平安B.都是线程平安C.都是非线程平安D.非线程平安,线程平安8.用户级线程开销很___,内核线程开销很___。〔C〕A.高,高B.高,低C.低,高D.低,低9.补充以下代码,该段代码创立了一个别离线程来运行dosth:〔B〕interror,fd;pthread_attr_ttattr;pthread_ttid;if(error=____________(&tattr))fprintf(stderr,"Failedtocreateattributeobject:%s\n",strerror(error));elseif(error=____________(&tattr,PTHREAD_CREATE_DETACHED))fprintf(stderr,"Failedtosetattributestatetodetached:%s\n",strerror(error));elseif(error=pthread_create(&tid,&tattr,dosth,&fd))fprintf(stderr,"Failedtocreatethread:%s\n",strerror(error));A.pthread_attr_setdetachstate,pthread_attr_initB.pthread_attr_init,pthread_attr_setdetachstateC.pthread_attr_setdetachstate,pthread_attr_setscopeD.pthread_attr_init,pthread_attr_setscope10.补充以下代码,该段代码创立了一个争夺内核资源的线程:〔D〕interror;intfd;pthread_attr_ttattr;pthread_ttid;if(error=____________(&tattr))fprintf(stderr,"Failedtocreateanattributeobject:%s\n",strerror(error));elseif(error=____________(&tattr,PTHREAD_SCOPE_SYSTEM))fprintf(stderr,"Failedtosetscopetosystem:%s\n",strerror(error));elseif(error=pthread_create(&tid,&tattr,processfd,&fd))fprintf(stderr,"Failedtocreateathread:%s\n",strerror(error));A.pthread_attr_setdetachstate,pthread_attr_initB.pthread_attr_init,pthread_attr_setdetachstateC.pthread_attr_setdetachstate,pthread_attr_setscopeD.pthread_attr_init,pthread_attr_setscope11.补充以下代码,该段代码用指定的优先级创立了一个线程属性对象的函数:〔〕#include<errno.h>#include<pthread.h>#include<stdlib.h>pthread_attr_t*makepriority(intpriority){/*createattributeobject*/pthread_attr_t*attr;interror;structsched_paramparam;if((attr=(pthread_attr_t*)malloc(sizeof(pthread_attr_t)))==NULL)returnNULL;if(!(error=pthread_attr_init(attr))&&!(error=pthread_attr_getschedparam(attr,¶m))){param.sched_priority=priority;error=pthread_attr_setschedparam(attr,¶m);}if(error){/*iffailure,besuretofreememory*/free(attr);errno=error;returnNULL;}returnattr;}A.pthread_attr_getschedparam,pthread_attr_setschedparamB.pthread_attr_getschedparam,pthread_attr_setdetachstateC.pthread_attr_setschedparam,pthread_attr_getschedparamD.pthread_attr_setdetachstate,pthread_attr_getschedparam12.互斥量和互斥锁是2种有效的___同步机制。互斥量能被____持有,等待互斥量的线程不能被逻辑地中断。〔B〕A.线程,长时间B.线程,短时间C.进程,长时间D.进程,短时间13.POSIX使用____类型的变量来表示互斥锁,程序在用该类型变量进行同步之前,____对其进行初始化。〔A〕A.pthread_mutex_t,需要B.mutex,需要C.pthread_mutex_t,不需要D.mutex,不需要14.如果线程引用了一个已经被销毁的互斥量,将会出现什么情况。〔C〕A.正常运行B.异常退出C.程序的行为未定义D.返回特定的错误15.如果一个线程试图去初始化一个已经被初始化了的互斥,将会出现什么情况。〔C〕A.正常运行B.异常退出C.程序的行为未定义D.返回特定的错误16.如果一个线程调用了pthread_mutex_destroy,而另一个线程讲互斥量锁定了,将会出现什么情况。〔C〕A.正常运行B.异常退出C.程序的行为未定义D.返回特定的错误17.补充以下代码,该段代码是一个可以由多个线程访问的计数器。〔B〕#include<pthread.h>staticintcount=0;staticpthread_mutex_tcountlock=_________;intincrement(void){/*incrementthecounter*/interror;if(error=pthread_mutex_lock(&countlock))returnerror;count++;returnpthread_mutex_unlock(&countlock);}intdecrement(void){/*decrementthecounter*/interror;if(error=pthread_mutex_lock(&countlock))returnerror;count--;returnpthread_mutex_unlock(&countlock);}intgetcount(int*countp){/*retrievethecounter*/interror;if(error=pthread_mutex_lock(&countlock))returnerror;*countp=count;returnpthread_mutex_unlock(&countlock);A.pthread_mutex_initB.PTHREAD_MUTEX_INITIALIZERC.pthread_cond_initD.pthread_rwlock_init18.看下面代码,答复以下问题:如果将done和lock的声明移到testandsetonce函数之外,testandset还会工作吗?〔A〕#include<pthread.h>inttestandsetonce(int*ovalue){staticintdone=0;staticpthread_mutex_tlock=PTHREAD_MUTEX_INITIALIZER;interror;if(error=pthread_mutex_lock(&lock))returnerror;*ovalue=done;done=1;returnpthread_mutex_unlock(&lock);}A.依然工作,但是定义在同一个文件中的其他函数就可以访问done和lock了。B.依然工作,定义在同一个文件中的其他函数不可以访问done和lock。C.不再工作,但是定义在同一个文件中的其他函数就可以访问done和lock了。D.不在工作,定义在同一个文件中的其他函数不可以访问done和lock。19.试图初始化一个已经被初始化了的读写锁,会发生什么情况。〔C〕A.正常运行B.异常退出C.程序的行为未定义D.返回特定的错误20.如果线程一个已经用pthread_rwlock_wrlock获取的锁上调用pthread_rwlck_rdlock,会发生什么。〔B〕A.没有任何问题B.可能会发生死锁C.返回特定的错误D.程序的行为未定义21.如果POSIX线程未被别离,在线程退出时,它的资源是________的。〔A〕A.不被释放B.被释放C.和有未别离没关系D.可能会被释放也有可能不被释放22.线程可以使用什么方法使其他线程退出。〔AB〕A.pthread_exit方法B.pthread_cancel方法C.pthread_setcancelstate方法D.以上都可以23.用户级线程的开销很____,内核级线程的开销____。〔D〕A.大,大B.小,小C.大,小D.小,大24.关于信号掩码,以下表述正确的选项是:〔D〕A.进程可以通过阻塞信号暂时地阻止信号的传递B.在传递之前,被阻塞的信号不会影响进程的行为C.信号掩码的类型为sigset_tD.以上都正确25.以下表述正确的选项是:〔D〕A.POSIX线程中不存在类似进程中的父与子概念B.如果要等待一个线程终止,就必须将线程的tid传递给pthread_join()C.与标准fork()相比,线程带来的开销很小D.以上都正确第7章:Windows多线程编程习题1.以下说法哪个是不正确的。〔A〕A.应用程序可以在内存中找到内核对象的数据结构并直接改变它们的内容。B.内核对象都是通过调用函数来创立的C.内核对象的数据结构只能被内核程序访问D.Windows提供了一组函数,以便用定义的很好的方法来对内核对象的数据结构进行操作2.下面哪个说法是正确的〔AB〕A.每个进程被初始化时,系统为它分配一个句柄表,用于保存该进程使用的内核对象信息B.相同的句柄值在不同的进程中可能标识不同的内核对象C.一个进程中止执行,它使用的内核对象也会被撤销D.内核对象是由进程拥有的3.以下说法哪个是不正确的。〔C〕A.进程是线程的容器B.单个进程可以包含多个线程C.进程中不一定有线程D.Win32中有专门的创立进程的API:CreateProcess4.下面哪些说法对线程来说是不正确的〔C〕A.线程也是由两个局部构成的:线程的内核对象和线程堆栈B.作系统用线程的内核对象来对线程实施管理C.一个进程中多个线程不可能能够执行相同的代码,但是可以对相同的数据进行操作D.线程堆栈用于维护线程在执行代码时需要的所有函数参数和局部变量。5.每个线程都有自己的进入点函数。主线程的进入点函数的名称必须为:〔ABCD〕AmainBwmainCWinMainD.wWinMai6.下面哪些函数和程序应用类型的对应关系不是正确的〔CD〕A.WinMain——需要ANSI字符和字符串的GUI应用程序B.wWinMain——需要Unicode字符和字符串的GUI应用程序C.main——需要Unicode字符和字符串的CUI应用程序D.wmain——需要ANSI字符和字符串的CUI应用程序7.下面是对线程函数的说明,适宜的选项是〔D〕A.主线程的进入点函数的名字必须是main、wmain、WinMain或wWinMainB.线程函数必须返回一个值,它将成为该线程的退出代码C.线程函数应该尽可能使用函数参数和局部变量。D.以上都正确8.哪个不是CreateThread的参数〔B〕A.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广东河源市龙川县林业局所属事业单位招聘工作人员15人高频重点提升(共500题)附带答案详解
- 2025年度消防设施设备租赁及维修服务合同范本2篇
- 2024年版权代理合同协议
- 细胞周期与神经代谢性疾病研究-洞察分析
- ICT项目施工高质量保障要求措施
- 2023年-2024年项目安全培训考试题答案历年考题
- 2023年-2024年企业主要负责人安全教育培训试题及一套答案
- 物联网技术助力金融行业数字化转型-洞察分析
- 2023年-2024年企业主要负责人安全培训考试题附答案(黄金题型)
- 娃娃玩具安全性研究与改进-洞察分析
- GB/T 44890-2024行政许可工作规范
- 军工合作合同范例
- 【7地XJ期末】安徽省宣城市宁国市2023-2024学年七年级上学期期末考试地理试题(含解析)
- 2025年中国稀土集团总部部分岗位社会公开招聘管理单位笔试遴选500模拟题附带答案详解
- 超市柜台长期出租合同范例
- 广东省广州市2025届高三上学期12月调研测试语文试题(含答案)
- 【8物(科)期末】合肥市第四十五中学2023-2024学年八年级上学期期末物理试题
- 统编版2024-2025学年三年级语文上册期末学业质量监测试卷(含答案)
- 从0 开始运营抖⾳音号sop 文档
- Module7 Unit2 This little girl can't walk(Period 1) (教学实录) -2024-2025学年外研版(三起)英语五年级上册
- 施工临建布置方案
评论
0/150
提交评论