第二章多线程分布式计算课后答案.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章多线程分布式计算课后答案

第二章 选择题 1 2 3 4 5 6 7 8 9 10 D A B C C E C A B B 11 12 13 14 15 16 17 18 B B B C A D A A 程序/方法与进程/线程有什么不同?(53页第四段) 答:一个程序/方法是由程序员写的一段代码,它是静态的。进程/线程是由执行的程序/方法、当前值、状态信息和用于支持它执行的资源构成,资源是它执行时的动态因素。换言之,一个进程/线程是一个动态实体,只有当程序或函数执行时才会存在。 比较多进程(多任务)操作系统和多线程编程环境。(53页5、6、7段) 答:为了真正并行执行多个进程/线程,必须存在多个处理器。如果系统中只有一个处理器,表面上多个进程/线程执行,实际上实在分时模式下顺序执行。 从同一代码块可以创建多个进程/线程。默认情况下,包含在不同进程/线程中的代码和数据是分离的,每一个都有它自己执行代码的副本、局部变量的栈、对象数据区以及其他数据元素。 通常情况下,一个分布式操作系统可以由不同电脑上的多个实例或副本构成,每一个实例或副本都可以管理多个进程。同样,每个进程可以是由多个线程组成的一个多线程程序。 什么是临界操作?用什么方法可以来保护临界操作?(54页第1段) 答:对共享资源的访问称为临界操作。虽然一个简单的锁定可以防止共享资源被访问,但是也消除了并行处理的可能性。更理想的方法是不锁定并行读操作,而锁定并行读-写和写-写组合。 什么是死锁?哪些策略可以用来解决死锁问题?(55页) 答:死锁的情况是两个或多个竞争操作等待对方完成,导致都不能完成。 解决方法: 死锁预防:使用一种算法可以保证不会发生死锁。 死锁避免:使用一种算法,能够遇见死锁的发生从而拒绝资源请求、 死锁检测和恢复:用一种算法来检测死锁的发生,强迫线程释放资源、挂起等待。 改进哲学家就餐问题使其不会产生死锁? 答:每一次最多只能有4个哲学家(共有5个哲学家)申请就餐,这样其中的一个哲学家就能申请到两只筷子,就能够进餐,再将筷子释放给其他哲学家就餐,直到所有哲学家就餐完毕。 Java中睡眠使用:sleep()方法;等待使用wait()方法;挂起使用join()方法。 ? sleep() 调用sleep()方法使线程暂时停止一段执行时间,该时间由给定的毫秒数决定 ,线程在指定时间内不会运行,会自动唤醒,不会让出控制权。 ? join() 方法使线程挂起,使当前执行的线程停下来等待,直至join()方法所调用的那个线程结束,再恢复执行 。例如:当有a和b两个线程,启用b.join();方法时,a线程就会被挂起,直到b线程结束,a线程才继续执行。 ? wait() 使线程等待,直到线程得到了notify()和notifyAll()消息,线程才会进入“可执行”状态。wait()、notify()、notifyAll()不同于其他线程方法,这3个方法是java.lang.Object类的一部分,所以在定义自己类时会继承下来。 创建子进程:int fork(); 启动子进程:exec(参数列表); 在java中,几个线程方法wait(),notify(),notifyALL()用于协调对共享资源的访问。C#的Monitor类具有执行相同功能的方法,它们是Monitor.Wait(),Monitor.Pulse(),Monitor.PulseALL()。 完全等价的有:start();run()。 独有的是:sleep()方法。 C#和java启动线程是一样的,都使用:Thread.Start()方法。 C#中创建线程:Thread t = new Thread(new ThreadStart(FunctionName)); java中创建线程: 方法一:继承Thread类创建线程 (1)继承Thread类; (2)覆盖run()方法; (3)用new MyThread(...)创建一个线程 (4)通过调用start()方法启动线程 方法二:实现Runnable接口创建线程 (1)实现Runnable接口; (2)覆盖run()方法; (3)用new MyThread(...)创建一个线程 (5)通过调用start()方法启动线程 解释monitor是怎么实现的?为什么monitor.enter/monitor.exit不能通过自动装箱拆箱的方式获得值类型变量?(P79) 答: 在进入一个buffer对象引用之前,运行时环境检查锁的开关状态。 如果锁是开的(true),线程告诉Monitor.Enter阻塞。堆内存中的对象锁被存储在叫做同步阻塞的表中;如果锁是关的(false),线程告诉Monitor.Enter解锁。在访问缓冲区引用的对象时阻止其它线程进入。

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档