编程实现经典IPC问题.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

编程实现经典IPC问题--第1页

学号2016143222姓名王娟实验日期2018.

实验名称编程实现经典IPC问题

实验目的:

在本实验中,通过对临界区,互斥体和信号量在经典同步问题中的使用,来加深对线程同步的理解。

实验内容:

编写程序实现生产者——消费者问题,哲学家进餐问题,读者—写者问题。

实验原理:(含相关算法流程图,可写多页)

生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。在

同一个进程地址空间内执行的两个线程生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。

消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产

者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线

程将被阻塞,直到新的物品被生产出来。

问题的实质是P、V操作,实验设一个共享缓冲区,当一个线程使用缓冲区的时候,另一个让其等待直到前一个线程

释放缓冲区为止。

读者作家(RW)或共享独占锁(也称为多个读取器/单写入器锁定或多读卡器锁)的一个同步原语,解决了一个读者

-writers问题。一个RW锁允许并发的只读操作的访问,而写操作需要独占访问。这意味着多个线程可以并行读出的

数据,但独占锁是需要编写或修改数据。当一个作家写数据,直到作家写完所有其他作家或读者将被阻止。一个常

见的用途可能是用于控制访问存储器中的数据结构不能被更新原子和是无效的(不应该由另一个线程被读取),直到

完成更新。

读者作家锁通常建在上面互斥和条件变量,或在顶部信号量。

编程实现经典IPC问题--第1页

编程实现经典IPC问题--第2页

实验过程与结果:

1.生产者——消费者问题

#includewindows.h

#includeiostream.h

#includestdio.h

constnum=10;

volatileintin=0,out=0;

intbuf[5]={0,0,0,0,0};

HANDLEempty,full;

CRITICAL_SECTIONcs;

staticDWORDWINAPIThreadp(LPVOIDlp)

{

LONGnp=reinterpret_castLONG(lp);

Sleep(np*10);

LONGitem=np+100;

WaitForSingleObject(empty,INFINITE);

EnterCriticalSection(cs);

buf[in]=item;in=(in+1)%5;

LONGnPrevCt(0);

if(ReleaseSemaphore(full,1,nPrevCt))

LeaveCriticalSection(cs);

return(0);

}

staticDWORDWINAPIThreadc(LPVOIDlp)

{

LONGnp=reinterpret_castLONG(lp);

Sleep(np*1000);

WaitForSingleObject(full,INFINITE);

EnterCriticalSection(cs);

文档评论(0)

182****5538 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档