正在加载图片...
consume (&item); 2.第一类读-写者问题 问题描述:(见信号量部分) 解答: 管程:bulletin=MODULE: (假设已实现一基本管程monitor,提供enter,leave,signal,wait等操作) r,w:condition; 一r控制读者使用黑板,W控制写者: writing:boolean; 一当前是否写者使用黑板 read account:integer; define start read,end read,start write,end write; use monitor.enter,monitor.leave,monitor.wait,monitor.signal; procedure start_read(): { if(writing)monitor.wait(r); read_account++; monitor.signal(r); procedure end_read(); { read_account--; if (read account=0)monitor.signal(w); } procedure start write(); if((read_account<>;0)or writing)monitor.wait(w); writing=true: procedure end write(); writing=false; if (r<>;NULL)monitor.signal(r); else monitor.signal(w);consume(&item); } } -------------------------------------------------------------------------------- 2. 第一类读-写者问题 问题描述:(见信号量部分) 解答: 管程:bulletin=MODULE; (假设已实现一基本管程 monitor,提供 enter,leave,signal,wait 等操作) r,w:condition; — r 控制读者使用黑板,w 控制写者; writing:boolean; — 当前是否写者使用黑板 read_account:integer; define start_read,end_read,start_write,end_write; use monitor.enter,monitor.leave,monitor.wait,monitor.signal; procedure start_read(); { if(writing) monitor.wait(r); read_account++; monitor.signal(r); } procedure end_read(); { read_account--; if (read_account=0) monitor.signal(w); } procedure start_write(); { if((read_account<>;0) or writing) monitor.wait(w); writing=true; } procedure end_write(); { writing=false; if (r<>;NULL) monitor.signal(r); else monitor.signal(w);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有