- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多核体系结构与并行编程模型计算机科学导论第八讲.ppt
* * * * * * * * * * * * * * * * * * * * * 条件变量 条件变量本身实质上 并没有需要检验的条件 值,而是使用共享数据 的状态来保存线程的条 件值,用于多线程之间 关于共享数据状态变化 的通信 当特定条件满足时, 线程等待或者唤醒其他 合作线程 共享内存并行编程模型 void producer() { while(1) { L-acquire(); // 临界区开始 while(LC == true) { C-wait(L); } // 产生下一个数据 LC = true; C-signal(L); // 临界区结束 L-release(); } } 死锁 当一个线程因等待另一个线程的资源而阻塞,而 同时该资源永远不会被释放 自死锁或递归死锁:线程T试图获得一个锁,而该锁已被线程T自己拥有 错序死锁:线程T1占有资源r1并等待由线程T2占有资源r2;而线程T2占有资源r2并等待由线程T1占有资源r1 编程中的问题:怎样避免出现死锁 共享内存并行编程模型 数据竞争 多个并行线程都访问某个共享变量v,其中至少有 一个线程修改v ,并且这些线程没有使用锁来控制 它们对v的访问 在有数据竞争的场合,各线程对数据的访问次序是不确定的,计算结果依赖于这个次序 数据竞争有时是共享数据和通信的一种方式,但多数情况下属于程序错误 编程中的问题:怎样发现程序中的数据竞争 共享内存并行编程模型 消息传递 消息传递是进程之间交换信息的一种方式,使用共享变量是另一种方式 在消息传递场合下,由于一个消息在被接收者接收之前,必须由发送者发送,因此隐含了同步机制 消息传递可以在分布式系统、共享内存的多处理器系统和单处理器系统中实现。在分布式系统上实现共享变量有较大难度 实现消息传递依靠两个通信原语:send和receive 消息传递并行编程模型 消息传递的发送和接收对象 进程对进程的传递:两个进程不依赖于线程自行进行通信,是最常见的消息传递方式 进程间的传递:属于不同进程的线程之间进行通信 进程内的传递:属于同一个进程的线程之间进行通信 消息传递并行编程模型 消息传递的同步与异步 同步:消息发送后,发送者必须等待,直到接收者的响应才能进行其他操作 异步:发送者不必等待接收者的响应就可以继续执行 对于采用共享存储模型的系统来说,消息传递必须是同步的 对于采用分布式存储模型的系统来说,消息传递则是异步的 消息传递并行编程模型 用消息传递机制解决生产者/消费者问题 void producer() { void consumer() { message pmsg; message cmsg; while (1) { while (1) { receive(cbox, pmsg); receive(pbox, cmsg); pmsg = produce(); consume(cmsg); send(pbox, pmsg); send(cbox, NULL); } } } } /* 等待空消息、生产 /* 接收消息、消耗消 消息、发送消息 */ 息、发送空消息 */ 消息传递并行编程模型 用消息传递机制解决生产者/消费者问题 void producer() { void consumer() { message pmsg; message cmsg; while (1) { while (1) { receive(cbox, pmsg); receive(pbox, cmsg); pmsg = produce(); consume(cmsg); send(pbox, pmsg); send(cbox, NULL); } } } } void main() { 创建消息信箱pbox, cbox; 给cbox发NULL消息; 创建进程producer和consumer; } 消息传递并行编程模型 小 结 本讲座小结 计算机体系结构的多样性,导致难以从它们概括出一种能代表它们的抽象机,并进一步抽象出统一的并行编程模型(即并行编程语言
本人在医药行业摸爬滚打10年,做过实验室QC,仪器公司售后技术支持工程师,擅长解答实验室仪器问题,现为一家制药企业仪器管理。
文档评论(0)