带来的问题 (3)不确定性 顺序程序两次同样值的测试,一般情况下都是一致的。即所说的再现。 并发程序因上述原因往往没有确定的结果值。对于有副作用的函数或表 达式这种先后次序的差异影响则更大。 (4)死锁( deadlock)是一种状态,由于进程对资源有互不相兼 容的要求而使进程无法进展。表现为 受到排斥进程永远访问不到所需资源。 循环等待进程资源分配链形成一封闭回路 无占先( no preemption)进程无法放弃所占的、其它进程需要的资源。 所谓占先,只要所据资源的进程未处于使用状态,另一优先级高的 进程有了要求,则此资源被后者占去 把持( wait and hold)相互以占有对方资源为放弃已占资源的先决条件
带来的问题 (3) 不确定性 顺序程序两次同样值的测试,一般情况下都是一致的。即所说的再现。 并发程序因上述原因往往没有确定的结果值。对于有副作用的函数或表 达式这种先后次序的差异影响则更大。 (4) 死锁(deadlock)是一种状态,由于进程对资源有互不相兼 容的要求而使进程无法进展。表现为: ➢ 受到排斥 进程永远访问不到所需资源。 ➢ 循环等待 进程资源分配链形成一封闭回路。 ➢ 无占先(no preemption) 进程无法放弃所占的、其它进程需要的资源。 所谓占先,只要所据资源的进程未处于使用状态,另一优先级高的 进程有了要求,则此资源被后者占去。 ➢ 把持(wait and hold) 相互以占有对方资源为放弃已占资源的先决条件
带来的问题 解决死锁的方法: 利用工具作静态死锁检测,可以避免或减少死锁出 现的可能 或事前,让进程同时提出所有需要的资源,消除把 持条件,或强行给资源排序,按此顺序满足要求, 消除循环等待条件 或事前,为调度程序声明最大的资源需求 日出现,最笨的办法是重新启动,试换数据, 找出原因改正之。事后重试解决 日出现,找出死锁地点,夭折某些事件或进程 或设置检测点
带来的问题 • 解决死锁的方法: – 利用工具作静态死锁检测,可以避免或减少死锁出 现的可能 – 或事前,让进程同时提出所有需要的资源, 消除把 持条件, 或强行给资源排序, 按此顺序满足要求, 消除循环等待条件 – 或事前,为调度程序声明最大的资源需求 – 一旦出现, 最笨的办法是重新启动, 试换数据, 找出原因改正之。事后重试解决 – 一旦出现, 找出死锁地点, 夭折某些事件或进程 或设置检测点
带来的问题 (5)死等( starvation 相互竞争的进程如果都满足进入某一资源条件,一般采用排队的先 来先服务原则。相对最公平,但有的进程占用一种资源时间过长, 致使其它资源长期闲置。适当地让它等待可以解放很多占时少而重 要的进程,这样更公平。于是,除了先来先服务而外,在调度例 程中约定或在条件中加入优先级表来达到此目的。调度程序则按此 优先级和先来后到统一调度。如果优先级不当就会造成某些进程永 远处于阻塞态,死等(但不是死锁)。死等是不公平调度引起的。解 决的办法是在改变某些进程的优先级,在公平性和合理性上作某种 折衷
带来的问题 (5) 死等(starvation) • 相互竞争的进程如果都满足进入某一资源条件, 一般采用排队的先 来先服务原则。相对最公平,但有的进程占用一种资源时间过长, 致使其它资源长期闲置。适当地让它等待可以解放很多占时少而重 要的进程, 这样更公平。于是,除了先来先服务而外,在调度例 程中约定或在条件中加入优先级表来达到此目的。调度程序则按此 优先级和先来后到统一调度。如果优先级不当就会造成某些进程永 远处于阻塞态,死等(但不是死锁)。死等是不公平调度引起的。解 决的办法是在改变某些进程的优先级,在公平性和合理性上作某种 折衷
主要内容 并发程序设计的基本概念 并发程序带来的问题 需要解决的基本问题 程序语言示例
主要内容: • 并发程序设计的基本概念 • 并发程序带来的问题 • 需要解决的基本问题 • 程序语言示例
并发语言需要解决的基本问题 安全性( safety)是程序在执行期间不会出现异常的结果。对于 顺序程序指其最终状态是正确的。对于并发程序指保证共享 变量的互斥访问和无死锁出现。 活性( liveness是程序能按预期完成它的工作。对于顺序程序 指程序能正常终止。对于并发程序指每个进程能得到它所要 求的服务;或进程总能进入临界段,或送出的消息总能到达目 的进程,活性深深受到执行机构调度策略的影响。 公平性( fairness)指在有限进展的假设下没有一个进程处于死 等状态。 无条件公平性:调度策略如能保证每个无条件的原子功能均能执行 弱公平性:在具有条件原子动作时,若条件原子动作能执行并依然 保持无条件公平性,则为弱公平性 强公平性:条件原子动作一定能执行,则为强公平性
并发语言需要解决的基本问题 • 安全性(safety)是程序在执行期间不会出现异常的结果。对于 顺序程序指其最终状态是正确的。对于并发程序指保证共享 变量的互斥访问和无死锁出现。 • 活性(liveness)是程序能按预期完成它的工作。对于顺序程序 指程序能正常终止。对于并发程序指每个进程能得到它所要 求的服务; 或进程总能进入临界段; 或送出的消息总能到达目 的进程, 活性深深受到执行机构调度策略的影响。 • 公平性(fairness)指在有限进展的假设下没有一个进程处于死 等状态。 – 无条件公平性:调度策略如能保证每个无条件的原子功能均能执行 – 弱公平性:在具有条件原子动作时,若条件原子动作能执行并依然 保持无条件公平性,则为弱公平性 – 强公平性:条件原子动作一定能执行,则为强公平性