- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 并发性:互斥和同步
5.1 并发的原理
5.2 互斥:硬件的支持
5.3* 信号量
5.4* 管程
5.5 消息传递
5.6 读者-写者问题
1
为什么要考虑“互斥与同步”?
在单CPU、多CPU及分布式系统中,有多个进程
并发执行。对资源的共享和竞争,使得并发进程
之间相互制约。
由于共享某些资源(如变量、文件、设备等),
一个进程的执行可能影响其它进程的执行结果。
与同一共享资源有关的程序段分散在各进程中,
且各进程的相对执行速度不可预知。
由于执行顺序不同,并发进程的执行结果将不确定
和不可再现,甚至可能导致错误。但发生错误的精
确条件和顺序很难再现,导致错误很难定位。
2
与并发相关的一些术语
原子操作:一个函数或动作的指令序列是不可分割的,要么
作为一个整体执行(不可中断) ,要么都不执行。
临界资源:一次仅允许一个进程独占使用的资源。
临界区:进程访问临界资源的那段程序代码。一次仅允许一
个进程在临界区中执行。
互斥:当一个进程正在临界区中访问临界资源时,其它进程
不能进入临界区。
同步:合作的并发进程需要按先后次序执行。
例如:一个进程的执行依赖于合作进程的消息或信号。当一
个进程没有得到来自于合作进程的消息或信号时需等待,直
到消息或信号到达才被唤醒。
死锁:多个进程全部阻塞,形成等待资源的循环链。
饥饿:一个就绪进程被调度程序长期忽视、不被调度执行。
进程互斥 Flash 进程同步 Flash
3
5.1 并发的原理
5.1.1 一个简单的例子
void echo()
{ echo()是一个共享的键盘字符回显
① chin=getchar();
② chout=chin; 过程,所有进程都可以调用echo() 。
③ putchar(chout); chin和chout是全局共享变量。
}
在单CPU和多CPU系统中,多个进程对全局变量的访问
不加以控制时,可能导致错误。
如:P1执行①后被中断,此时chin值为x ;
之后P2执行①②③后结束,此时chin值为y ;
最后P1被恢复调度,执行②③,输出y 。
解决:一次只允许一个进程在echo中执行。当P2企图进
入echo时将被阻塞,待P1退出echo后,P2才能进入。
4
5.1 并发的原理
对程序的并发执行不加以控制时,运行结果具有不可
再现性和错误的另一个例子:
例:全局共享的堆栈S ,栈顶指针top ,取栈顶数据的
get(top)和将数据压栈的put(blk)可被P1、P2并发执行。
Procedure put(blk) Procedure get(top)
Begin
Begin local r
top:=top+1 r:=(top)
top:=top-1
(top):=blk return(r)
End
文档评论(0)