第8章 互斥信号量管理

第8章 互斥信号量管理

ID:6880635

大小:230.00 KB

页数:12页

时间:2018-01-29

第8章 互斥信号量管理_第1页
第8章 互斥信号量管理_第2页
第8章 互斥信号量管理_第3页
第8章 互斥信号量管理_第4页
第8章 互斥信号量管理_第5页
资源描述:

《第8章 互斥信号量管理》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第8章互斥型信号量管理任务可以用互斥型信号量实现对共享资源的独占式处理。mutex是二值信号量。mutex可以在应用程序中用于降解优先级反转问题。互斥型信号量由3个元素组成:1个标志,指示mutex是否可以使用(0或1);1个优先级,准备一旦高优先级的任务需要这个mutex,赋给占有mutex的任务;1个等待该mutex的任务列表。对于互斥型信号量提供6种服务:OSMutexCreate(),OSMutexDel(),OSMutexPend(),OSMutexPost(),OSMutexAccept(),OSMutexQuery()。mu

2、tex只能供任务使用,用于处理共享资源。8.00建立一个互斥型信号量,OSMutexCreate()程序清单L8.2建立一个信号量OS_EVENT*OSMutexCreate(INT8Uprio,INT8U*err){#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifOS_EVENT*pevent;if(OSIntNesting>0){*err=OS_ERR_CREATE_ISR;return((OS_EVENT*)0);}#ifOS_ARG_CHK_EN>0if(prio>=OS_LOWEST_

3、PRIO){*err=OS_PRIO_INVALID;return((OS_EVENT*)0);}#endifOS_ENTER_CRITICAL();if(OSTCBPrioTbl[prio]!=(OS_TCB*)0){OS_EXIT_CRITICAL();*err=OS_PRIO_EXIST;return((OS_EVENT*)0);}OSTCBPrioTbl[prio]=(OS_TCB*)1;pevent=OSEventFreeList;if(pevent==(OS_EVENT*)0){OSTCBPrioTbl[prio]=(OS_T

4、CB*)0;OS_EXIT_CRITICAL();*err=OS_ERR_PEVENT_NULL;return(pevent);}OSEventFreeList=(OS_EVENT*)OSEventFreeList->OSEventPtr;OS_EXIT_CRITICAL();pevent->OSEventType=OS_EVENT_TYPE_MUTEX;pevent->OSEventCnt=(prio<<8)

5、OS_MUTEX_AVAILABLE;pevent->OSEventPtr=(void*)0;OS_EventWaitListI

6、nit(pevent);*err=OS_NO_ERR;return(pevent);}8.01删除一个互斥型信号量,OSMutexDel()#ifOS_MUTEX_DEL_ENOS_EVENT*OSMutexDel(OS_EVENT*pevent,INT8Uopt,INT8U*err){#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifBOOLEANtasks_waiting;INT8Upip;if(OSIntNesting>0){*err=OS_ERR_DEL_ISR;return(pevent

7、);}#ifOS_ARG_CHK_EN>0if(pevent==(OS_EVENT*)0){*err=OS_ERR_PEVENT_NULL;return((OS_EVENT*)0);}if(pevent->OSEventType!=OS_EVENT_TYPE_MUTEX){*err=OS_ERR_EVENT_TYPE;return(pevent);}#endifOS_ENTER_CRITICAL();if(pevent->OSEventGrp!=0x00){tasks_waiting=TRUE;}else{tasks_waiting=FA

8、LSE;}switch(opt){caseOS_DEL_NO_PEND:if(tasks_waiting==FALSE){pip=(INT8U)(pevent->OSEventCnt>>8);OSTCBPrioTbl[pip]=(OS_TCB*)0;pevent->OSEventType=OS_EVENT_TYPE_UNUSED;pevent->OSEventPtr=OSEventFreeList;OSEventFreeList=pevent;OS_EXIT_CRITICAL();*err=OS_NO_ERR;return((OS_EVE

9、NT*)0);}else{OS_EXIT_CRITICAL();*err=OS_ERR_TASK_WAITING;return(pevent);}caseOS_DEL_ALWAYS:while

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

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

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