多任务通信.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多任务通信概要

实验2 多任务通信 实验目的 1、熟悉VxWorks进程间通信机制,并通过实验了解资源冲突的原因和解决方法。 实验要求 1、设计两个任务tHigh和tLow,分别访问两个共享资源,达到下图的死锁效果,死锁效果,并解决该死锁问题,用windview分析。 实验原理 1、VxWorks的信号量 (1)二进制信号量:最快和常用的信号量,提供阻塞方式,用于实现同步或互斥。 (2)互斥信号量:用于实现互斥问题的特殊的二进制信号量,解决具有互斥、优先级继承、删除安全和递归等情况。 (3)计数信号量:类似于二进制信号量,记录信号量被释放的次数。适合于一个资源的多个实例需要保护的情况。 2、互斥信号量的创建、获取和释放 (1)semMCreate( ):分配并初始化一个互斥信号量,函数原型为: SEM_ID semBCreate ( int options, /*信号量选项*/ SEM_B_STATE initialState /*信号量初始化状态值*/ ); (2)semTake( ):占有一个信号量,函数原型为: STATUS semTake ( SEM_ID semId /*所要得到的信号量ID号*/ int timeout /*等待时间*/ ); (3)semGive( ):释放一个信号量,函数原型为: STATUS semGive ( SEM_ID semId /*所给出的信号量ID号*/ ); (4)创建任务 int taskSpawn( name, priority, options, stackSize, entryPt, arg1,…,arg10) Name任务名,如果是NULL系统就给一个默认的名字; Priority 任务优先级,值从0-255; Options 任务选项,如VX_UNBREAKABLE; stackSize 所分配的以字节为单位的堆栈大小; entryPt 开始执行的代码的地址; arg1…arg10 entryPt总共可以有10个参数; 如果函数执行成功,则返回任务标识(id), 否则返回错误号。 3、产生死锁的原因 (1) 竞争资源引起进程死锁 进程推进顺序不当引起死锁 resource++; } 解决死锁:useResource1()函数主体不变,useResource2()的代码改为如下所示。 //解决死锁 semTake(mutex1, WAIT_FOREVER); semTake(mutex2, WAIT_FOREVER); semGive (mutex2); semGive (mutex1); (3)任务函数tLow()和tHigh() tLow()和tHigh()分别表示任务1和任务2。 (4)入口函数vxmain() vxmain()用于启动任务1和任务2。 运行结果 1、死锁情况下windview产生的图 2、解决死锁情况下windview产生的图 总结 通过本次实验,实现死锁以及解决死锁,本人了解了VxWorks进程间的通信机制,死锁产生原因以及解决死锁的方法,熟悉了对VxWorks互斥信号量的操作以及windview的使用。 附录 deadlock.cpp #include vxWorks.h #include semLib.h #include taskLib.h #include stdio.h void tLow(); void tHigh(); int resource; SEM_ID mutex1; SEM_ID mutex2; int initResource(void) { /*保护共享资源的互斥信号量创建*/ mutex1 = semMCreate (SEM_Q_PRIORITY|SEM_INVERSION_SAFE); mutex2 = semMCreate (SEM_Q_PRIORITY|SEM_INVERSION_SAFE); if ((NULL == mutex1)||(NULL == mutex2)) return ERROR; resource = 0; /*共享资源初始化*/ return OK; } void useResource1() {

您可能关注的文档

文档评论(0)

jiayou10 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档