-
并发程序设计 编辑
并发程序设计(concurrent programming)是指由若干个可同时执行的程序模块组成程序的程序设计方法。这种可同时执行的程序模块称为进程。进程由数据和有关的语句序列组成。组成一个程序的多个进程可以同时在多台处理器上并行执行,也可以在一台处理器上夹插执行。采用并发程序设计可以使外围设备和处理器并行工作,缩短程序执行时间,提高计算机系统效率。
同步
在并发程序设计中,将加工后的数据送入缓冲区和从缓冲区取出数据打印输出必须依次进行。在数据送入缓冲区前不能打印输出,在缓冲区内的数据没有打印输出完毕时不能输入;否则,一批数据可能被重复打印或者一批数据还没有打印输出就被新送入的数据冲掉。因此,对“送入缓冲区”和“从缓冲区取出数据”两个操作必须加以约制,以保证它们依次执行,否则就会发生错误。
产生这个问题的原因是两个进程都要访问缓冲区,也就是说它们有一个公共变量。在并发程序设计中,各进程对公共变量的访问必须加以约制,这种约制称为同步。进程的同步是通过同步机制实现的。现已有多种同步机制,具有代表性的是PV操作和管程。
PV操作是最早提出的同步操作。PV操作的名称来源于荷兰字prolagen(企图降低)和verhogen(升起)。PV操作是作用于信号量上的原语。所谓原语是指其执行是不会被打断的,即一个进程在执行PV操作时,不会强行地被打断而让处理器去执行另一个进程。PV操作的定义是:执行P操作P(S)时,信号量S之值减1,若结果不为负数,见P(S)执行完毕;否则,执行P操作的进程暂时停止。等待释放。执行V操作V(S)时,信号量S之值加1,若结果不大于 0,则释放一个等待释放的进程。有了PV操作后,上例中的问题就即可解决。
1973年,C.A.R.霍尔提出的管程是另一种重要的同步机制。管程是指一组公共数据同与其有关的操作的集合。只有引用管程中的操作才能访问管程中的数据。一个进程引用管程中的操作时,只有在管程中的各操作均不处于活动状态时才被响应。当管程中的一个操作被引用后,它就成为活动状态。当管程中一个操作已执行完毕或在执行中处于等待状态时,它就不是活动状态。管程将公共数据同与其有关的操作集中在一起,使得并发程序设计易于理解,程序正确性也容易保证。因此,管程有助于同步机制从PV操作向前发展。它是并发程序设计趋于成熟的标志之一。
死锁
进程因争夺资源而无休止地相互等待称为死锁。例如,进程P1占有了绘图机而申请行式打印机,进程P2占有了行式打印机而申请绘图机。它们都因为申请不到资源而永远等待,这就是死锁。解决死锁问题有两种途径:一是预防死锁,设计各种资源调度算法,防止死锁发生;另一种途径是检测死锁,当死锁发生时能及时发现并进行排除。
并发
要有效地采用并发程序设计,必须提供并发程序设计语言。并发程序设计语言的主要特征,是引入了进程概念。因此,用它编写的程序包含若干可同时执行的进程。此外,并发程序设计语言还提供实现进程同步和通信的手段。
1、本站所有文本、信息、视频文件等,仅代表本站观点或作者本人观点,请网友谨慎参考使用。
2、本站信息均为作者提供和网友推荐收集整理而来,仅供学习和研究使用。
3、对任何由于使用本站内容而引起的诉讼、纠纷,本站不承担任何责任。
4、如有侵犯你版权的,请来信(邮箱:baike52199@gmail.com)指出,核实后,本站将立即删除。