经典进程同步问题ppt课件.ppt

经典进程同步问题ppt课件.ppt

ID:59763721

大小:160.50 KB

页数:41页

时间:2020-11-23

经典进程同步问题ppt课件.ppt_第1页
经典进程同步问题ppt课件.ppt_第2页
经典进程同步问题ppt课件.ppt_第3页
经典进程同步问题ppt课件.ppt_第4页
经典进程同步问题ppt课件.ppt_第5页
资源描述:

《经典进程同步问题ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、2.4经典进程同步问题在多道程序环境下,进程同步问题是十分重要的,也是相当有趣的问题,因而吸引了不少学者对它进行研究。其中较有代表性的是“生产者——消费者问题”、“读者——写者问题”、“哲学家进餐问题”等。12.4.1生产者——消费者问题问题的描述:有一群生产者进程生产消息,并将此消息提供给消费者进程消费。为使生产者进程和消费者进程并发执行,在它们之间设置一个具有n个缓冲区的公共缓冲池。生产者进程将它所生产的消息放入一个缓冲区中,消费者进程可以从一个缓冲区中取得一个消息消费。不允许消息费者进程到一个空

2、缓冲区中去取消息,也不允许生产者进程向一个已装有消息且尚未被取走消息的缓冲区中投放消息。2需要解决的问题:1、对缓冲池的互斥访问,即只有一个进程访问缓冲区。2、对生产、消费进程的同步,即:有产品时才能消费,无产品时,必须先生产后消费;有空间时才能生产,空间满时,必须先消费再生产。3信号量的设置:1、一个互斥信号量mutex,用于实现对共享缓冲区的互斥访问,初始值为1。2、两个同步信号量,分别表示可用资源数:Empty:表示空缓冲区的个数,初始值为nFull:表示装有消息的缓冲区的个数,初始值为0,(一

3、个缓冲区中放一条消息)4一、利用记录型信号量解决生产者——消费者问题数据结构:Varmutex,empty,full:semaphore∶=1,n,0;//定义信号量并赋初值buffer:array[0,…,n-1]ofitem;//定义缓冲区in,out:integer∶=0,0;//定义存取指针的初始位置5Proceduer://生产者进程beginrepeat…生产一件产品;…wait(empty);wait(mutex);buffer[in]:=nextp;in∶=(i

4、n+1)modn;signal(mutex);signal(full);untilfalse;endempty:=empty-1;ifempty<0thenblock;mutex:=mutex-1;ifmutex<0thenblock;full:=full+1;iffull<=0thenwakeup;mutex:=mutex+1;ifmutex<=0thenwakeup;6consumer://消费者进程beginrepeatwait(full);wait(mutex);nextc:

5、=buffer[out];out∶=(out+1)modn;signal(mutex);signal(empty);消费这件产品;untilfalse;endfull:=full-1;iffull<0thenblock;mutex:=mutex-1;ifmutex<0thenblock;empty:=empty+1;ifempty<=0thenwakeup;mutex:=mutex+1;ifmutex<=0thenwakeup;7例:有生产者P1、P2和消费者C1,利用3个信号量和对它们的

6、wait和signal操作实现同步与互斥。初始条件:记录型信号量mutex.value=1,empty=2,full=0执行序列mutexemptyfullempty队列full队列P1:wait(empty),wait(m),CS01signal(m),signal(f)11P1:wait(empty),wait(m),CS00signal(m),signal(f)12P2:wait(empty)-1p2P1:wait(empty)-2p1C1:wait(full),wait(m),CS01sign

7、al(m),signal(empty)1-1(唤醒p2)P2:wait(m)0CSC1:wait(full),wait(m)-10C1P2:signal(m),signal(full)01(唤醒C1)C1:CS,signal(m),signal(e)10(唤醒p1)P1:wait(m)08在生产者—消费者问题中应注意:(1)在每个程序中用于实现互斥的wait(mutex)和signal(mutex)必须成对地出现。(2)对资源信号量empty和full的wait和signal操作,同样需要成对地出现,

8、但它们分别处于不同的进程中,这样保证生产者进程和消费者进程的同步及交替执行。(3)在每个进程中,多个wait操作顺序不能颠倒,而signal操作的次序是无关紧要的。9Wait操作不能颠倒!!P:wait(empty)wait(mutex)C:wait(full)wait(mutex)如果颠倒P:wait(mutex)mutexl.value=0wait(empty)如果此时缓冲池满empty=-1,P阻塞C:wait(mutex)mutex.value=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。